Searching over multiple columns in excel vba

后端 未结 4 1855
广开言路
广开言路 2020-12-04 00:34

I am able to search a text in column A of my spreadsheet by using this

With WB.Sheets(\"MySheet\")
    Set FindRow = .Range(\"A:A\").Find(What:=\"ProjTemp1\"         


        
4条回答
  •  情歌与酒
    2020-12-04 01:01

    Just posted similar reply at MSDN and wanted to share here if anyone is still using VBA. The function for multiple match that works pretty fast.

    It might help a lot if you are interested in effective code since using Application.Match() is much much faster that Find() or INDEX() method or simple looping.

    The syntax is the same as COUNTIFS() but it returns the match index instead of counting.

    Public Function MultiMatch(ParamArray X0() As Variant) As Variant
    MultiMatch = CVErr(xlErrNA)
    If UBound(X0) = -1 Then Exit Function
    On Error GoTo ErrorHandler
    Set Xws = X0(1).Parent
    X_rFrow = X0(1)(1, 1).Row
    X_rLrow = X_rFrow + X0(1).Rows.Count - 1
    jLAST = UBound(X0)
    l = X_rFrow
    
    j = 0
    Do While IsError(MultiMatch) And j + 1 <= jLAST And Not IsError(X1)
        jCOL = X0(j + 1).Column
        Set TRNG = Xws.Range(Xws.Cells(l, jCOL), Xws.Cells(X_rLrow, jCOL))
        X1 = Application.Match(X0(j), TRNG, 0)
        If Not IsError(X1) Then
            l = TRNG(X1).Row
            If X1 = 1 Then
                If j + 1 = jLAST Then
                    MultiMatch = l - X_rFrow + 1
                Else
                    j = j + 2
                End If
            Else
                j = 0
            End If
        End If
    Loop
    Exit Function
    ErrorHandler:
    MultiMatch = CVErr(xlErrName)
    End Function
    

提交回复
热议问题