Vba 如何返回2个值并将其舍入?自学资料

Vba 如何返回2个值并将其舍入?自学资料,vba,excel,multiple-results,Vba,Excel,Multiple Results,我正在编写一个应该计算简单基础的代码,为了做到这一点,我必须用我的函数返回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 Strin

我正在编写一个应该计算简单基础的代码,为了做到这一点,我必须用我的函数返回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
函数fundacosimples(b、l、carga)作为变量
tensao=板材(“Tabelas e Constantes”).范围(“tensao”).值
双色暗区
将Bs变暗为单个
将Ls设置为单个
Dim Resultado(1到2)作为字符串
如果b=l,则
面积=(1.1*carga)/tensao
Bs=Sqr(面积)
Ls=Bs
艾尔塞夫b l
面积=(1.1*carga)/tensao
Bs=平方米((2*面积)/3)
Ls=(3*Bs)/2
如果结束
结果(1)=四舍五入(Bs,2)
结果(2)=四舍五入(Ls,2)
基金会样本=(结果(1)&“/”和结果(2))
端函数
这个舍入我用它只是为了得到一个用2位小数舍入的值,例如:2,73到2,75;0,89至0,90。 我尝试使用
ActiveCells.Offset(0,1)
,但该语句无效。
是否可以向右跳转一列?

您可以使用
ActiveCell.Offset(0,1).value=SomeValue
,但是-这是在编写常规
子项时使用的。您正在编写一个函数/用户定义的函数

在UDF中,不可能改变不同的细胞

但是,一种解决方法是使用UDF,当它输入到单元格中时,您可以使用
工作表\u Change
事件更改该事件的
目标
参数旁边的单元格

编辑: 一些示例代码:

在常规模块中:

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

然后,您可以使用自己的参数稍微编辑该函数,并进一步使用它。

您不能。UDF接受输入并返回一个值,该值将成为调用单元格的
。UDF无法更改其他单元格。此解决方案的一个问题是,当仅因为修改了其他单元格而重新计算目标时,
工作表\u Change
事件不会被调用。
Target
应该是作为UDF输入的任何单元格,而不是包含UDF调用的单元格。老实说,OP最好用原生Excel函数调用实现四舍五入;性能会更好,并且不会有VBA代码隐藏在一些模糊的事件处理程序中。不使用的VBA程序员不会轻易看到该事件处理程序。是的,你完全正确。然而,要更新UDF,首先还需要
Application.Volatile
,采取这种方法还有一些问题-不过,这是用另一个公式填充“单元格旁边的单元格”的解决方案。我同意在这种情况下最好使用原生Excel函数。