3

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

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

如果您想将 15 个部分加在一起,则可以延长此时间。有点痛。

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

最好的,T.恒

4

2 回答 2

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

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

在此处输入图像描述

编辑#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)
于 2016-04-28T13:16:39.193 回答
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
于 2016-04-28T13:15:01.217 回答