Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据库计算器?VBA函数编写_Vba_Excel_Decibel - Fatal编程技术网

数据库计算器?VBA函数编写

数据库计算器?VBA函数编写,vba,excel,decibel,Vba,Excel,Decibel,所以我有非常具体的任务。我想创建一个将分贝单位相加的函数。目前,您必须输入以下内容 =10*LOG10(10^(A1/10)+10^(A2/10)) 如果你想把15个部分加在一起,那么就把它做得更长。有点痛 理想情况下,它的工作原理与excel函数SUM类似,只需输入任何内容即可。有人能帮我把这些放在一起,或者至少告诉我,如果你必须从头开始创建它,总和会是什么样子 最好的, T.Heng下面是一个非常简单的用户定义函数的示例(应该输入到标准模块中),该函数可以接受任意数量的参数并返回这些参数的总

所以我有非常具体的任务。我想创建一个将分贝单位相加的函数。目前,您必须输入以下内容

=10*LOG10(10^(A1/10)+10^(A2/10))

如果你想把15个部分加在一起,那么就把它做得更长。有点痛

理想情况下,它的工作原理与excel函数
SUM
类似,只需输入任何内容即可。有人能帮我把这些放在一起,或者至少告诉我,如果你必须从头开始创建它,总和会是什么样子

最好的,
T.Heng

下面是一个非常简单的
用户定义函数的示例(应该输入到标准模块中),该函数可以接受任意数量的参数并返回这些参数的总和。您的示例似乎涉及更高级的逻辑,因此您必须扩展我的示例。如果您需要更多帮助,请告诉我们

Function AddSomeDigits(ParamArray nums()) As Double
    Dim vRunningTotal As Variant

    vRunningTotal = 0

    For i = LBound(nums) To UBound(nums)
        vRunningTotal = vRunningTotal + nums(i)
    Next i

    AddSomeDigits = vRunningTotal
End Function
这个小小的UDF()将为您提供更大的灵活性:

Public Function decibelle(rng As Range, N As Long) As Double
    Dim wf As WorksheetFunction, i As Long, Z As Double
    Set wf = Application.WorksheetFunction
    For i = 1 To N
        Z = Z + 10 ^ (rng(i) / 10)
    Next i
    decibelle = 10 * wf.Log10(Z)
End Function
其中第一个参数是输入范围,第二个参数是输入数量:

编辑#1:

如果希望UDF()更像SUM(),请考虑:

Public Function decibelle2(rng As Range) As Double
    Dim wf As WorksheetFunction, r As Range, Z As Double
    Set wf = Application.WorksheetFunction
    For Each r In rng
        Z = Z + 10 ^ (r.Value / 10)
    Next r
    decibelle2 = 10 * wf.Log10(Z)
End Function
所以你可以像这样使用它:

=decibelle2(A1:A2)

我喜欢使用ParamArray…………你可以用它制作非常接近SUM()的东西。非常好的例子!这很像SUM。如果我必须考虑方程,我希望进入LOG10函数的部分使用这些输入。我在使用这些迭代时遇到了麻烦。你能帮我吗?根据我原来的帖子,我问的问题清楚吗?函数DBADD3(ParamArray nums())作为双精度DBPrTot作为变量DBPrTot=0表示i=LBound(nums)到UBound(nums)DBPrTot=DBPrTot+10^(nums(i)/10)下一个i DBADD3=10*wf。Log10(DBPrTot)结束函数就是我现在的“代码”函数dbaddB3(ParamArray nums())对于i=LBound(nums)到UBound(nums),作为变量DBPrTot=0的双尺寸DBPrTot,DBPrTot=DBPrTot+10^(nums(i)/10)下一个i DBADD3=10*wf.Log10(DBPrTot)结束Function@T.Heng很高兴听到你知道了。基本上,
nums
的工作原理与任何其他数组类似,您可以使用其索引器引用每个值。例如,第一个值是
nums(1)
,等等。哦,这很好用,效果也很好!如果我想选择不连续的参数呢?比如A1:A2、A4、A6等等?例如,对于下面的ParamArray?@T.Heng,我同意
ParamArray
将是此代码的一大改进…………遗憾的是,我不是
ParamArray
使用方面的专家…………我建议,一旦您对UDF()的版本感到满意,打开一个关于
ParamArray
问题的新问题。结束代码是:函数DBADD3(ParamArray nums())作为双精度DBPrTot作为变量DBPrTot=0,用于i=LBound(nums)到UBound(nums)DBPrTot=DBPrTot+10^(nums(i)/10)下一个i DBADD3=10*工作表函数。Log10(DBPrTot)端函数