2017-08-03 8 views
-1

フィルタ処理された表をあるスプレッドシートから別のスプレッドシートにコピーするVBAコードを記述しました。これはコードです:コードが実行される前に、フィルタが適用され、その後、コードが見える細胞およびコピーを選択しExcel VBAで一意の値をコピー

Option Explicit 

Public Sub LeadingRetailers() 
    Dim rngRows As Range 

    Set rngRows = Worksheets("StoreDatabase").Range("B5:N584") 
    With rngRows 
     .SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("LeadingRetailersAUX").Range("B2") 
    End With 

Sheets("Leading Retailers").Activate 

End Sub 

それらのフィルタを通過した行のみを取得するように。濾過テーブルで

は、複数の行で繰り返されるいくつかの範囲、名前の特定のセットの列Lで、私が持っているコピーします。

列Lの名前ごとに1行だけをコピーするようにコードに追加したいと思います。言い換えれば、列Lに表示される各名前の最初の行のみをコピーするコードフィルタリングされたテーブルの

答えて

1

Pehaps:この回答を参照してください。コードは行をループします(5〜584)。最初に、行が隠されているかどうかをチェックします。そうでない場合は、列 "L"の値がすでに辞書に入っているかどうかをチェックします。そうでない場合は、行を宛先シートにコピーし、その値を辞書に追加します。

Option Explicit 

Public Sub LeadingRetailers() 
    Dim d As Object 
    Dim i As Long 
    Dim k As Long 

    Set d = CreateObject("scripting.dictionary") 
    i = 2 'first row of pasting (in "LeadingRetailersAUX") 
    For k = 5 To 584 
     If Not (Worksheets("StoreDatabase").Rows(k).RowHeight = 0) Then 'if not hidden 
      If Not d.Exists(Worksheets("Hoja1").Cells(k, 12).Value) Then 'if not in Dictionary 
       d.Add Worksheets("StoreDatabase").Cells(k, 12).Value, i 'Add it 
       Worksheets("LeadingRetailersAUX").Cells(i, 2).EntireRow.Value = Worksheets("StoreDatabase").Cells(k, 1).EntireRow.Value 
       i = i + 1 
      End If 
     End If 
    Next 

End Sub 
0

名前の各セットの最初の出現を示した後、いつものようにあなたのマクロを実行するだけに、テーブルに別のフィルタを適用することができます。このようなものはあなたを助けることができる

https://superuser.com/a/634284

+0

ありがとうございました。問題は、フィルターがVBAを介しても適用され、このビットがVBAにも必要であることです。 – franciscofcosta

+0

ああ、私は見る...おそらくVBAにこの "高度なフィルタ"を適用する方法があるが、悲しいかな私はそうする方法がわからない。 – tdsymonds

+0

いずれにしてもありがとうございます。 – franciscofcosta

関連する問題