2017-02-27 4 views
1

Gibt es eine Möglichkeit zum Suchen und Exportieren (sortierte) Zeilen von einem Arbeitsblatt zu einem anderen?Suchen (und Verschieben) Zeilen mit Bedingung

Ich habe ein Arbeitsblatt, das eine Liste von Zeilen speichert.

Ich muss suchen und exportieren (sortiert) Zeilen, die bestimmte Schlüsselwörter enthalten.

Zum Beispiel "AAA" und "CCC" sind die Schlüsselwörter

Arbeitsblatt 1 (Original):

A    B    C    D 
AAA 123  01/mm/yyyy 
BBB 456  02/mm/yyyy 
CCC 789  03/mm/yyyy 
AAA 123  04/mm/yyyy 

Arbeitsblatt 2 (sortiert):

A    B    C    D 
AAA 123  01/mm/yyyy 
AAA 123  04/mm/yyyy 
CCC 789  03/mm/yyyy 

ps: Reihen das enthält "123" wird zusammen gruppiert

Jede Hilfe wäre sehr appreaciated, Vielen Dank für das Lesen.

Antwort

0

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.

Verwandte Themen