在excel vba中search多个列

我可以通过使用这个来search电子表格A列中的文本

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

之后,我可以通过执行FindRow.Row来获取行号

那么如何取回列号Column A == "ProjTemp1" && Column B == "ProjTemp2" && Column C == "ProjTemp3"的行号Column A == "ProjTemp1" && Column B == "ProjTemp2" && Column C == "ProjTemp3"

尝试使用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' 

另外一个build议是循环遍历整个表,并使用如下的嵌套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