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

bar*_*lop 2 excel vba excel-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
Run Code Online (Sandbox Code Playgroud)

我所拥有的不起作用

在此输入图像描述

Flo*_* B. 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
Run Code Online (Sandbox Code Playgroud)

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