在excel vba中搜索多个列

Nul*_*nce 3 excel vba excel-vba

我可以使用此搜索电子表格的A列中的文本

With WB.Sheets("MySheet")
    Set FindRow = .Range("A:A").Find(What:="ProjTemp1", LookIn:=xlValues)
End With
Run Code Online (Sandbox Code Playgroud)

之后我可以通过这样做得到行号 FindRow.Row

然后我如何取回行号 Column A == "ProjTemp1" && Column B == "ProjTemp2" && Column C == "ProjTemp3"

Dmi*_*liv 8

尝试使用Autofilter:

Dim rng As Range
'disable autofilter in case it's already enabled'
WB.Sheets("MySheet").AutoFilterMode = False 

With WB.Sheets("MySheet").Range("A1:C1")
    'set autofilter'
    .AutoFilter Field:=1, Criteria1:="=ProjTemp1"
    .AutoFilter Field:=2, Criteria1:="=ProjTemp2"
    .AutoFilter Field:=3, Criteria1:="=ProjTemp3"
End With

With WB.Sheets("MySheet")
    On Error Resume Next
    Set rng = .Range("A2:A" & .Rows.Count).Rows.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
End With
If Not rng Is Nothing Then
   MsgBox rng.Row ' returns first visible row number
End If

WB.Sheets("MySheet").AutoFilterMode = False 'disable autofilter'
Run Code Online (Sandbox Code Playgroud)


Net*_*loh 5

另一种建议是循环遍历表并使用嵌套的 if 语句,如下所示:

Sub ReturnRowNumber()
    Dim i As Long, GetRow As Long
    For i = 2 To Sheets("MySheet").Cells(Rows.Count, 1).End(xlUp).Row
        'Criteria search
        If Sheets("MySheet").Cells(i, 1).Value = "ProjTemp1" Then
            If Sheets("MySheet").Cells(i, 2).Value = "ProjTemp2" Then
                If Sheets("MySheet").Cells(i, 3).Value = "ProjTemp3" Then
                    'Returns row
                    GetRow = i
                End If
            End If
        End If
    Next i
End Sub
Run Code Online (Sandbox Code Playgroud)