dB计算器? VBA功能写作

时间:2016-04-28 13:01:58

标签: excel vba excel-vba decibel

所以我完成了特定的任务。我想创建一个将分贝单元加在一起的函数。目前,您必须输入类似

的内容

entry = int(raw_input("Press 7 to append text into this file, 8 to truncate the content of this file, or 9 to delete this file : "))

如果你想要将15个部分加在一起,那就更长一些。有点痛。

理想情况下,它会像excel函数=10*LOG10(10^(A1/10)+10^(A2/10))一样工作,只需接受任何输入。有人可以帮我把它放在一起,或者至少告诉我如果你必须从头开始创建SUM会是什么样的?

最佳, T. Heng

2 个答案:

答案 0 :(得分:5)

这个小 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

其中第一个参数是输入范围,第二个参数是输入数:

enter image description here

修改#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)

答案 1 :(得分:1)

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

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