Es gibt eine Reihe von verschiedenen Möglichkeiten, dies zu erreichen. Ich werde zwei davon unten aufführen. Genau genommen müssen Sie Ihre Referenzen nicht in so vielen Schritten qualifizieren, wie Sie hier sehen, aber ich habe das getan, um Ihr Verständnis zu verbessern. Bei der Verwendung von zwei verschiedenen Arbeitsmappen ist es wichtig, dass Excel immer genau weiß, welche von ihnen Sie den Autofilter Bezug auf
1. Verwenden Sie machen
Dies ist bei weitem die schnellste Methode, vor allem, wenn Sie eine große Daten haben set
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. Schleife durch jede Zeile in dem Quell Arbeitsmappe
das Setup ist das gleiche wie oben, aber diese Zeit ist eine For
Schleife für Ihre Bedingungen in jeder Zeile
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
Hinweis, in beiden Fällen zu prüfen, verwendet werden, wenn Ihre
destinationWorkbook
bereits geöffnet sein werden Sie
Workbooks.Open()
nicht verwenden müssen Anruf. Ersetzen Sie diese Zeile mit diesem:
Set destinationWorkbook = Workbooks("myfile.xlsx")
Anmerkung 2 ich auch die Daten in Ihrem sourceWorkbook
sortiert, um sicherzustellen, dass alle Werte, die auf das destinationWorkbook
übertragen werden ebenfalls sortiert werden. Dies setzt voraus, dass Sie Header für Ihre Daten haben. Wenn nicht, ändern Sie die Eigenschaft header
in header:=xlNo
.