【问题标题】:Excel: Passing an array in a user defined function?Excel:在用户定义的函数中传递数组?
【发布时间】:2010-12-23 07:10:03
【问题描述】:

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

最终我想测试给定日期(dateDay)是否在多个日期范围内(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

但已经在这个阶段,该功能无法正常工作。它返回#VALUE!

【问题讨论】:

    标签: arrays excel vba parameters user-defined-functions


    【解决方案1】:

    Paramarray 创建一个变体数组,每个元素都包含参数: 试试这样的

    
    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
    

    【讨论】:

      【解决方案2】:

      好的,我添加了一个功能

      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
      

      这允许您添加日期范围,以及用于检查日期的单元格。

      那么单元格中的公式就是

      =CB_IsInRangeArr(C1,A1:B2)
      

      c1 是要检查的日期,a1:b2 是日期范围。

      请询问我是否可以进一步提供帮助。

      【讨论】:

        猜你喜欢
        • 2013-08-13
        • 1970-01-01
        • 1970-01-01
        • 2016-07-16
        • 2021-09-04
        • 1970-01-01
        • 2013-04-03
        • 2013-01-03
        • 2018-12-23
        相关资源
        最近更新 更多