如何对 return 2 个值进行四舍五入? Excel VBA
How to return 2 values and rounding them? Excel VBA
我正在编写一个应该计算简单基础的代码,为了做到这一点,我必须 return 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,73 到 2,75; 0,89 至 0,90。
我尝试使用 ActiveCells.Offset(0,1)
,但该声明无效。
是否可以只向右跳一列?
您可以使用 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
一般来说,函数不应写入值或从电子表格访问值。他们应该访问他们的参数和 return 结果。
像这样尝试,你需要的一个过于简单的版本:
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
然后您可以使用自己的参数稍微编辑一下函数并进一步使用它。
我正在编写一个应该计算简单基础的代码,为了做到这一点,我必须 return 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,73 到 2,75; 0,89 至 0,90。
我尝试使用 ActiveCells.Offset(0,1)
,但该声明无效。
是否可以只向右跳一列?
您可以使用 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
一般来说,函数不应写入值或从电子表格访问值。他们应该访问他们的参数和 return 结果。 像这样尝试,你需要的一个过于简单的版本:
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
然后您可以使用自己的参数稍微编辑一下函数并进一步使用它。