Как вернуть 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
Затем вы можете немного отредактировать функцию со своими параметрами и использовать ее в дальнейшем.