search(和重新定位)行与条件

有没有办法search和从一个工作表导出(sorting)行到另一个?

我有一个存储行列表的工作表。

我需要search并导出(sorting)包含某些关键字的行。

例如,“AAA”和“CCC”是关键字

工作纸1(原件):

ABCD AAA 123 01/mm/yyyy BBB 456 02/mm/yyyy CCC 789 03/mm/yyyy AAA 123 04/mm/yyyy 

工作纸2(已sorting):

 ABCD AAA 123 01/mm/yyyy AAA 123 04/mm/yyyy CCC 789 03/mm/yyyy 

ps:包含“123”的行将被组合在一起

任何帮助将非常appreaciated,感谢阅读。

有很多不同的方法来实现这一点。 我会在下面列出其中的两个。 严格地说,你不需要像在这里看到的那样在许多步骤中限定你的引用,但是我已经做了这些来帮助你理解。 当使用两个不同的工作簿时,Excel总是确切地知道你正在参考哪些人

1.使用自动filter

这是迄今为止最快的方法,特别是如果你有一个大的数据集

 Sub MoveSpecificRows3() Dim sourceWorkbook As Workbook, destinationWorkbook As Workbook Dim sourceWorksheet As Worksheet, destinationWorksheet As Worksheet Dim sourceRange As Range, destinationRange As Range, r As Range 'get your workbooks Set sourceWorkbook = ThisWorkbook Set destinationWorkbook = Workbooks.Open("C/My Documents/.../myfile.xlsx") 'get your worksheets Set sourceWorksheet = sourceWorkbook.Worksheets("Sheet1") Set destinationWorksheet = destinationWorkbook.Worksheets("Sheet1") 'get your ranges Set sourceRange = sourceWorksheet.Range("A1:D10") Set destinationRange = destinationWorksheet.Range("A1") 'filter on values and copy/paste them over With sourceRange .Sort key1:=.Columns(1), order1:=xlAscending, key2:=.Columns(2), order2:=xlAscending, Header:=xlYes .AutoFilter Field:=1, Criteria1:="=AAA", Operator:=xlOr, Criteria2:="=CCC" .SpecialCells(xlCellTypeVisible).Copy destinationRange sourceWorksheet.AutoFilterMode = False 'remove the filter End With Application.CutCopyMode = xlCopy End Sub 

2.循环遍历源工作簿中的每一行

设置与上面相同,但这次使用For循环检查每行的条件

 Sub MoveSpecificRows2() Dim sourceWorkbook As Workbook, destinationWorkbook As Workbook Dim sourceWorksheet As Worksheet, destinationWorksheet As Worksheet Dim sourceRange As Range, destinationRange As Range, r As Range 'get your workbooks Set sourceWorkbook = ThisWorkbook Set destinationWorkbook = Workbooks.Open("C/My Documents/.../myfile.xlsx") 'get your worksheets Set sourceWorksheet = sourceWorkbook.Worksheets("Sheet1") Set destinationWorksheet = destinationWorkbook.Worksheets("Sheet1") 'get your ranges Set sourceRange = sourceWorksheet.Range("A1:D10") Set destinationRange = destinationWorksheet.Range("A1") 'sort your data With sourceRange .Sort key1:=.Columns(1), order1:=xlAscending, key2:=.Columns(2), order2:=xlAscending, Header:=xlYes End With 'loop through each row in your source workbook and move over when AAA or CCC found For Each r In sourceRange.Rows Select Case r.Cells(1, 1) Case "AAA", "CCC" destinationRange.Resize(1, r.Columns.Count).Value = r.Value Set destinationRange = destinationRange.Offset(1, 0) End Select Next r End Sub 


请注意 ,在这两种情况下,如果您的destinationWorkbook已经打开,则不需要使用Workbooks.Open()调用。 用这个replace那一行:

 Set destinationWorkbook = Workbooks("myfile.xlsx") 

注2我还对sourceWorkbook的数据进行sorting,以确保传输到destinationWorkbook sourceWorkbook任何值也被sorting。 这假设你有你的数据标题。 如果不是,请将header属性更改为header header:=xlNo