ExcelマクロVBAサンプル集 | 重複削除してコピー(AdvancedFilter) | Excelマクロの実用サンプル、エクセルVBA集と解説



最終更新日:2013-06-04

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


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

以下の表で説明します。

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

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

このマクロは、


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

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

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文の判定ですので、色々と複雑な条件を指定できます。

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






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

ブックを安全確実に開く方法(Open)
ブックを閉じる(Close)
他ブックを開いて閉じる(Open,Close)
ブックを開かずにセル値を取得(ExecuteExcel4Macro,Excel.Application)
罫線を簡単に引く(Borders,BorderAround)
マクロの開始・終了(Applicationのプロパティ)
オートフィルター(AutoFilter)

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

空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)
CSVの読み込み方法(改の改)|ExcelマクロVBAサンプル集(3月17日)
変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.ひらがな⇔カタカナの変換|エクセル基本操作
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
8.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.定数と型宣言文字(Const)|ExcelマクロVBA入門



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

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


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    ↑ PAGE TOP