数据库计算器?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)端函数