Optional ranges in vba function

后端 未结 2 576
执念已碎
执念已碎 2021-01-18 18:54

I am trying to return the columns count on a range, sometimes I need one range, but, sometimes I need more than one range.

I have put in optional ranges so I can cho

相关标签:
2条回答
  • 2021-01-18 19:28

    If you use the ParamArray keyword in the arguments you can supply a variable number of arguments.

    Public Function GetColumnCount(ParamArray Ranges() As Variant) As Long
    
        Dim lReturn As Long
        Dim i As Long
        Dim rResult As Range
        Dim rArea As Range
    
        'Loop through the Ranges array supplied by ParamArray
        For i = LBound(Ranges) To UBound(Ranges)
            'Only work with those array members that are ranges
            If TypeName(Ranges(i)) = "Range" Then
                'Use Union to combine all the ranges
                If rResult Is Nothing Then
                    Set rResult = Ranges(i)
                Else
                    Set rResult = Application.Union(rResult, Ranges(i))
                End If
            End If
        Next i
    
        'Loop through the Areas and add up the columns
        If Not rResult Is Nothing Then
            For Each rArea In rResult.Areas
                lReturn = lReturn + rArea.Columns.Count
            Next rArea
        End If
    
        GetColumnCount = lReturn
    
    End Function
    

    To use:

    =getcolumncount(E2:K18) = 7
    =getcolumncount(D4:L14,N4:P14) =12 (9+3)
    =getcolumncount(C7:F15,H7:L15,K7:N15) =11 (omits double counting overlap)
    
    0 讨论(0)
  • 2021-01-18 19:39

    Try it like this

    Function GetColoumnCount(ARange1 As Range, Optional ARange2 As Range, Optional ARange3 As Range, Optional ARange4 As Range) As Long  
        Dim Result As Long
        Result = 0
    
        Result = ARange1.Columns.Count ' This works
        If Not ARange2 Is Nothing Then
            Result = Result + ARange2.Columns.Count
        End If
    
        GetColoumnCount = Result    
    End Function
    
    0 讨论(0)
提交回复
热议问题