从另一张表的列表中查找表格中的值,并对整行进行着色

我在第一列的表1中列出了一些值,这些值可能会有所不同。

我想要在工作表2中find这些值,并为这些值在工作表2中的所有行着色。

Dim FindString As Range Dim Rng As Range FindString = Worksheets("Sheet1").Range("I2" & _ .Range("I" & .Rows.Count).End(xlUp).Row + 1).Value If Trim(FindString) <> "" Then With Sheets("Sheet2").Range("A1:AZ500") Set Rng = .Find(What:=FindString, _ After:=.Cells(.Cells.Count), _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False) If Not Rng Is Nothing Then 'Application.Goto Rng, True Else End If End With End If With Rng.Interior .Pattern = xlSolid .Color = 255 End With 

FindString实际上是一个数组,所以我改变了它的声明。

但是,您需要在该数组上循环来search所有值:
For i = LBound(FindString, 1) To UBound(FindString, 1)

而且,因为在第二张纸上只有一次这个值,所以你需要使用FindNext

 Dim FindString() As Variant Dim Rng As Range Dim i As Long Dim FirstAddress As String Dim LastRow As Long With Sheets("Sheet1") LastRow = .Range("J" & .Rows.Count).End(xlUp).Row If LastRow > 2 Then FindString = .Range("J2:J" & LastRow).Value Else ReDim FindString(1 To 1, 1 To 1) FindString(1,1) = .Range("J2").Value End If End With 'Sheets("Sheet1") For i = LBound(FindString, 1) To UBound(FindString, 1) If Trim(FindString(i, 1)) <> vbNullString Then With Sheets("Sheet2").Range("A1:AZ500") Set Rng = .Find(What:=FindString(i, 1), _ After:=.Cells(1, 1), _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False) If Not Rng Is Nothing Then With Rng FirstAddress = .Address Do With .EntireRow.Interior .Pattern = xlSolid .Color = 255 End With Set Rng = .FindNext(Rng) 'Look until you find again the first result Loop While Not Rng Is Nothing And Rng.Address <> FirstAddress End With 'Rng End If End With 'Sheets("Sheet2").Range("A1:AZ500") Else End If Next i 

编辑添加解决scheme

你正在调FindString As Range ,但随后使用它作为一个数组( FindString = someRange.Value

你最好使用AutoFilter()

我不确定你是否在A列中查找FindString值,或者在Sheet2列A:AZ中searchFindString值,所以我发布了这两个选项的代码


在Sheet2的列A中searchFindString值

 Sub main2() Dim FindString As Variant With Worksheets("Sheet1") FindString = Application.Transpose(.Range("I2", .Cells(.Rows.Count, "I").End(xlUp).Offset(1)).Value) End With With Sheets("Sheet2").Range("A1:AZ500") .AutoFilter Field:=1, Criteria1:=FindString, Operator:=xlFilterValues If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then With .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Interior .Pattern = xlSolid .Color = 255 End With End If .Parent.AutoFilterMode = False End With End Sub 

在Sheet2的列A:AZ中searchFindString值

 Option Explicit Sub main2() Dim FindString As Variant Dim col As Range With Worksheets("Sheet1") FindString = Application.Transpose(.Range("I2", .Cells(.Rows.Count, "I").End(xlUp).Offset(1)).Value) End With With Sheets("Sheet2").Range("A1:AZ500") For Each col In .Columns .AutoFilter Field:=col.Column, Criteria1:=FindString, Operator:=xlFilterValues If Application.WorksheetFunction.Subtotal(103, col.Cells) > 1 Then With .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Interior .Pattern = xlSolid .Color = 255 End With End If .Parent.AutoFilterMode = False Next End With End Sub