在Excel VBA中,如何编写可以在数组公式中工作的函数?

时间:2017-09-10 14:38:31

标签: excel excel-vba vba

在Excel VBA中,我知道我可以在多个单元格上使用数组公式,方法是选择Col C的一系列单元格,然后执行= A1:10 * B1:B10 Ctrl-shift-enter。

但假设不是乘法运算符,我希望它是我的mymult。

我如何编写mymult函数?

Function MyMult(a As Integer, b As Integer)
  MyMult = a * b
End Function

我所拥有的不是

enter image description here

1 个答案:

答案 0 :(得分:5)

将参数声明为变体。然后使用Application.Caller.HasArray检查UDF是否用作数组公式:

Public Function MyMult(a, b)
  If Application.Caller.HasArray Then
    Dim valsA(), valsB(), r&
    valsA = a.Value
    valsB = b.Value

    For r = LBound(valsA) To UBound(valsA)
      valsB(r, 1) = valsA(r, 1) * valsB(r, 1)
    Next

    MyMult = valsB
  Else
    MyMult = a * b
  End If
End Function

请注意,在按CTRL + SHIFT + ENTER之前需要选择C1:C3。