Excel:在用户定义的函数中传递数组?

如何在MS Excel VBA中将数组作为parameter passing给用户定义的函数?

最后我想testing,如果一个给定的date(dateDay)是在几个date范围(arrayVacation):

Function CB_IsInRangeArr(dateDay As Date, ParamArray arrayVacation() As Variant) As Boolean ' Test that the array is in the form of 2 columns and n rows / if not send back an error If (UBound(arrayVacation, 1) <> 2) Then CB_IsInRangeArr = CVErr(xlErrNA) Else CB_IsInRangeArr = TRUE End If End Function 

然而在这个阶段,这个function不能正常工作。 它返回#VALUE!

好的,我添加了一个function

 Public Function CB_IsInRangeArr(c As Date, range As range) As Boolean Dim iRow As Integer For iRow = 1 To range.Rows.Count Dim startDate As Date, endDate As Date startDate = range.Cells(iRow, 1) endDate = range.Cells(iRow, 2) If (startDate <= c And endDate >= c) Then CB_IsInRangeArr = True Exit Function End If Next iRow End Function 

这使您可以添加date范围,并为date检查一个单元格。

那么在单元格中的公式是

 =CB_IsInRangeArr(C1,A1:B2) 

其中c1是检查date,a1:b2是date范围。

请问我是否可以进一步协助。

Paramarray创build一个variablesarrays,每个元素都保存参数:尝试类似这样的事情

 Function CB_IsInRangeArr(dateDay As Date, ParamArray arrayVacation() As Variant) As Variant Dim nParams As Long Dim vRangeValues As Variant Dim jParam As Long Dim j As Long nParams = UBound(arrayVacation) - LBound(arrayVacation) + 1 If nParams &le 0 Then Exit Function On Error GoTo Fail For jParam = LBound(arrayVacation) To UBound(arrayVacation) vRangeValues = arrayVacation(jParam).Value For j = LBound(vRangeValues) To UBound(vRangeValues) If (vRangeValues(j, 1) &le dateDay And vRangeValues(j, 2) &ge dateDay) Then CB_IsInRangeArr = True Exit Function End If Next j Next jParam Exit Function Fail: CB_IsInRangeArr = CVErr(xlErrNA) End Function