select与数组中的每个项目匹配的行

在Excel文件1中,我有非常大的表,在同一列中的每一行中的数字(比如说F栏)。 在Excel文件2中,我也有一列中的数字(比方说A列)。

问:如何selectfile2中包含数字的所有行。

我发现如何selectfile2中包含file1中的一个string的行…但string数组对我来说有点棘手,file1中的数组非常大。

Sub SelectManyRows() Dim CatchPhrase As String Dim WholeRange As String Dim AnyCell As Object Dim RowsToSelect As String CatchPhrase = "10044" // <- here should be array from file1 col A 'first undo any current highlighting Selection.SpecialCells(xlCellTypeLastCell).Select WholeRange = "A1:" & ActiveCell.Address Range(WholeRange).Select On Error Resume Next ' ignore errors For Each AnyCell In Selection If InStr(UCase$(AnyCell.Text), UCase$(CatchPhrase)) Then If RowsToSelect <> "" Then RowsToSelect = RowsToSelect & "," ' add group separator End If RowsToSelect = RowsToSelect & Trim$(Str$(AnyCell.Row)) & ":" & Trim$(Str$(AnyCell.Row)) End If Next On Error GoTo 0 ' clear error 'trap' Range(RowsToSelect).Select End Sub 

下面的想法是试图避免通常效率低下的循环。 相反,我使用AdvancedFilter假设它可能与你所拥有的一组数据。

该代码适用于位于不同工作表(File1和File2)中的以下一组数据。 您需要将其更改为在需要时使用工作簿。

在这里输入图像说明

 Sub qTest() Sheets("File1").Activate Dim sRNG As Range Dim aRNG As Range Set sRNG = Sheets("File2").Range("S1", Sheets("File2").Range("S1").End(xlDown)) Set aRNG = Sheets("File1").Range("A1", Sheets("File1").Range("a1").End(xlDown)) aRNG.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=sRNG, Unique:=False Dim aADD As String aADD = aRNG.SpecialCells(xlCellTypeVisible).Address aRNG.Parent.ShowAllData Range(aADD).Select End Sub 

类似的东西可以使用。 select是可以避免的 ,除非实际select你正在寻找的行。 此外,这dynamic地添加相同的数字到最后select的范围。

 Dim cl As Variant Dim first_range As Boolean: first_range = True Dim colF_range As Range, selected_range As Range 'colF_range is the list in File 2 Set colF_range = Workbooks("File2").Worksheets("Your_Worksheet") _ .Range("F:F") 'Go through each cell in the File 2 list For Each cl In colF_range 'Look if that cell's value matches something 'in File 1 column A If Not Workbooks("File1").Worksheets("Your_Worksheet") _ .Range("A:A").Find(cl.Value) Is Nothing Then 'If so, select that row in File 2 If first_range Then Set selected_range = cl.EntireRow first_range = False Else Set selected_range = Application.Union _ (cl.EntireRow, selected_range) End If End If Next