如何编写一个在Excel VBA中使用范围或参数列表的函数?

SUM为例,我可以做这样的事情:

 =SUM(F5:F7,F6:F8,A1,E7:G7,F7,2,7) 

这需要多个范围和/或单个单元格,并将其全部添加。 我的问题是如何做到这一点与VBAfunction,例如推广二元XOR:

 Function BXOR(A As Integer, B As Integer) As Integer BXOR = CLng(A) Xor CLng(B) End Function 

当我必须=BXOR(BXOR(BXOR(w,x),y),z)


Marcofunction的通用版本:

 Function BXOR(ParamArray vars() As Variant) As Long Dim i,j As Long BXOR = 0 For i = 0 To UBound(vars) If Not IsObject(vars(i)) Then ' Handle explicitly passed integer arguments, eg BXOR(1,[...]) BXOR = BXOR Xor CLng(vars(i)) ElseIf IsArray(vars(i).Value2) Then ' Handle 1-D ranges of cells, eg BXOR(A1:A3,[...]) For j = 1 To UBound(vars(i).Value2) BXOR = BXOR Xor CLng(vars(i)(j).Value2) Next j Else ' Handle individual cells, eg BXOR(A1,[...]) BXOR = BXOR Xor CLng(vars(i).Value2) End If Next i End Function 

我认为你正在寻找一个ParamArray

你的代码应该是这样的:

 Function BXor(ParamArray vars() As Variant) as Long Dim i As Long Dim tmp As Long For i = 0 To UBound(vars) tmp = tmp Xor clng(vars(i)) Next BXor = tmp End Function 

您可以使用ParamArray传递可变数目的参数。 types必须是Variant

 Function BXOR(ParamArray args() As Variant)