2017-02-27 9 views
1

あるワークシートから別のワークシートに(ソートした)行を検索およびエクスポートする方法はありますか?条件付き行を検索(および再配置)する

私は、行のリストを格納しているワークシートを持っています。

特定のキーワードを含む行を検索してエクスポートする(並べ替え)必要があります。例えば

、 "AAA" 及び "CCC" のキーワードである

ワークシート1(オリジナル):

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

ワークシート2(ソート):

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

PS:行"123"が含まれていると一緒にグループ化されます

何か助けがありました、読んでいただきありがとうございます。

答えて

0

これを達成するにはいくつかの方法があります。私はそれらの2つを以下で説明します。厳密に言えば、あなたがここに示すように多くのステップであなたの参照を修飾する必要はありませんが、私はあなたの理解を助けるためにそれを行っています。二つの異なるワークブックを使用する場合は、Excelは、常にあなたが大規模なデータを持っている場合は特に、

1.にオートフィルタこれは、これまでの最速の方法である

を参照しているそれらのかを正確に知っていることが不可欠ですソースブック

セットアップの各行を介し

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ループを設定することと同じです上記のごdestinationWorkbookが既に開放される場合は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 



をチェックするために利用されているこの時間は、両方のケースでは、あなたがWorkbooks.Open()を使用する必要はありませんコール。これでその行を置き換えます

Set destinationWorkbook = Workbooks("myfile.xlsx") 

注2私もdestinationWorkbookに介して転送されている任意の値もソートされていることを確認してくださいsourceWorkbook内のデータを並べ替え。これは、データのヘッダーがあることを前提としています。そうでない場合は、headerプロパティをheader:=xlNoに変更します。

関連する問題