Как вернуть 2 значения и округлить их? Excel VBA

Я работаю над кодом, который должен вычислять простые основы, и для этого мне нужно вернуть 2 значения с моей функцией - предпочтительно в двух разных столбцах.

Function FundacaoSimples(b, l, carga) As Variant

tensao = Sheets("Tabelas e Constantes").Range("tensao").Value

Dim area As Double
Dim Bs As Single
Dim Ls As Single
Dim Resultado(1 To 2) As String

If b = l Then
    area = (1.1 * carga) / tensao
    Bs = Sqr(area)
    Ls = Bs
ElseIf b <> l Then
    area = (1.1 * carga) / tensao
    Bs = Sqr((2 * area) / 3)
    Ls = (3 * Bs) / 2
End If

Resultado(1) = Round(Bs, 2)
Resultado(2) = Round(Ls, 2)

FundacaoSimples = (Resultado(1) & " / " & Resultado(2))

End Function

В этом округлении я использую его только для того, чтобы получить значение, округленное до 2 десятичных знаков, например: от 2,73 до 2,75; От 0,89 до 0,90. Я пытался работать с ActiveCells.Offset(0,1), но утверждение недействительно. Можно ли просто перепрыгнуть одну колонку вправо?

2 ответа

Решение

Вы могли бы использовать ActiveCell.Offset(0, 1).value = SomeValueОднако - вот когда пишу обычную Sub, Вы пишете функцию / пользовательскую функцию.

В UDF невозможно изменить разные ячейки.

Однако, обходной путь должен иметь UDF, и когда он введен в ячейку, вы можете использовать Worksheet_Change событие, чтобы изменить ячейку рядом с Target параметр этого события.

Изменить: Пример кода:

В обычном модуле:

Public Function MyUDF(param1 as integer, param2 as integer) as Integer
    MyUDF = param1 + param2
End Function

На рабочем листе, где вы хотите смещение:

Private Sub Worksheet_Change(Byval Target as Range)
    If Left(Target.Formula, 6) = "=MyUDF" Then
        Target.Offset(0, 1).value = "somevalue at the offset cells"
    End If
End Sub

В общем случае функции не должны записывать значения или получать доступ к значениям из электронной таблицы. Они должны получить доступ к своим параметрам и вернуть результат. Попробуйте вот такую ​​упрощенную версию того, что вам нужно:

Option Explicit

Public Sub TestMe()

    ActiveCell = FundacaoSimples(0)
    ActiveCell.Offset(0, 1) = FundacaoSimples(1)

End Sub

Function FundacaoSimples() As Variant

    ReDim varResult(1)

    varResult(0) = 55
    varResult(1) = 100

    FundacaoSimples = varResult

End Function

Затем вы можете немного отредактировать функцию со своими параметрами и использовать ее в дальнейшем.

Другие вопросы по тегам