VBAサンプル集
重複削除してコピー(AdvancedFilter)

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
公開日:2013年5月以前 最終更新日:2013-06-04

重複削除してコピー(AdvancedFilter)


重複データを排除して、別シートにコピーする場合です。

以下の表で説明します。

Excel VBA 解説

フィルターオプションを使います。

Sub sample1()
  Worksheets("Sheet1").Columns("A:B").AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=Worksheets("Sheet2").Range("A1"), Unique:=True
End Sub

このマクロは、

Excel VBA 解説

この指定と同じになりります。

似たような方法ですが、コピー部分を自分で記述する場合です。

Sub sample2()
  Worksheets("Sheet1").Range("A:B").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
  Worksheets("Sheet1").Range("A1").CurrentRegion.Resize(, 2).SpecialCells(xlCellTypeVisible).Copy _
      Worksheets("Sheet2").Range("A1")
  Worksheets("Sheet1").ShowAllData
End Sub

SpecialCells(xlCellTypeVisible)

これは、省略しても動作は同じですが、指定することをお勧めします。

フィルター結果の見えているセルのみコピーしていると分かり易いので。

Worksheets("Sheet1").ShowAllData
フィルターで非表示になっている行を再表示しています。

フィルター機能を使用せず、全て自力でやってみましょう。



Sub sample3()
  Dim oldCode() As Variant
  Dim i As Long, j As Long
  Dim ws2 As Worksheet
  Set ws2 = Worksheets("Sheet2")
  
  With Worksheets("Sheet1")
    ReDim oldCode(1 To 2)
    ws2.Range(ws2.Cells(1, 1), ws2.Cells(1, 2)).Value = .Range(.Cells(1, 1), .Cells(1, 2)).Value
    j = 2
    For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
      If oldCode(1) <> .Cells(i, 1) Or _
        oldCode(2) <> .Cells(i, 2) Then
        ws2.Cells(j, 1) = .Cells(i, 1)
        ws2.Cells(j, 2) = .Cells(i, 2)
        oldCode(1) = .Cells(i, 1)
        oldCode(2) = .Cells(i, 2)
        j = j + 1
      End If
    Next i
  End With
End Sub

もしこのような事をする必要があるとすれば、

重複の判定が複雑で、単純なフィルターで出来ない場合になるかと思います。

IF文の判定ですので、色々と複雑な条件を指定できます。

ただ、そんな場合でも、作業列を追加し、単純なフィルターが適用できるよう工夫することが重要です。





同じテーマ「マクロVBAサンプル集」の記事

シートの追加・削除(Add,Delete)
シートの複数選択(Select)
複数シートの印刷(PrintOut)
重複削除してコピー(AdvancedFilter)
ブックを安全確実に開く方法(Open)
ブックを閉じる(Close)
他ブックを開いて閉じる(Open,Close)
ブックを開かずにセル値を取得(ExecuteExcel4Macro,Excel.Application)
罫線を簡単に引く(Borders,BorderAround)
マクロVBAの開始時と終了時に指定しておくべきApplicationのプロパティ
オートフィルター(AutoFilter)


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ