ディクショナリオブジェクトを使用した重複データの削除について説明します。
HOME | 更新履歴 | ご利用上の注意事項 | FAQ | プライバシーポリシー | サイトマップ | Excel VBA 質問掲示板
日付
累計
本日
累計
本日
:
:
:
:
:
アクセス上位ページ
- コンボボックス
- テキストファイル読込
- セルの書式(背景色・パターン)
- AutoFilter メソッド
- Dir関数
- テキストファイル新規書込
- InStr関数
- InputBoxメソッド
- Sort メソッド
- マクロ有効ブックの保存と設定
- 比較演算子 ( Like も含む)
- テキストボックス
- FileDialogオブジェクト@
- ワークシートの数
- FileDialogオブジェクトA
- セルの書式(保護)
- Hidden プロパティ
- ワークシート関数によるカウント処理
- Split関数
- オブジェクト変数と Set
- オプションボタン
- OpenTextFile メソッド
- セルの書式(表示形式)
- チェックボックス
- LBound、UBound関数
- ラベル
- リストボックス
- FSOによるファイルコピー
- プロシージャの呼び出し
- ステップ実行
最近の更新内容
- 2016/5/7 ページ追加 1.(7)-n.PrintPreview メソッド
- 2015/12/13 ページ追加 5.(2)-i.トグルボタン
- 2015/10/18 『比較演算子 ( Like も含む)』内容修正
1.(7)-o.PrintOut メソッド
1.(7)-p.印刷ヘッダー、フッターの設定
5.(2)-j.スクロールバー
5.(2)-k.スピンボタン
5.(2)-l.イメージ
(1)-b.ディクショナリオブジェクトの生成と使用例 ⇐ [PREV]
[NEXT] ⇒ (1)-d.集計処理
Excel VBA ≫ 4.DCO - 概要と使用例 ≫ (1)-c.重複データの削除
ディクショナリオブジェクトを使用した重複データの削除
このページではディクショナリオブジェクトを使用した重複データの削除について説明します。
重複データの削除は、データの存在チェックや追加が簡単に行えるディクショナリオブジェクトを使用すると簡単に行うことができます。
<重複データ削除処理の流れ>
<入力データ>
<マクロ実行結果>
<重複データ削除処理の流れ>
- データがディクショナリオブジェクトに登録済みか Exists メソッドでチェックする。
- 登録済みでなければ、ディクショナリオブジェクトへデータを新規登録(Add)する。
登録済みの場合は必要に応じて何か処理(カウント数を加算するなど)を行う。 - 最後に Keys メソッドで重複を削除したデータをVariant型変数で配列として受け取る。
- ディクショナリオブジェクトを使用した重複データ削除処理の例 以下の例では、アクティブシートA列にあるデータの重複を削除して、その結果をメッセージボックスに表示します。 メッセージボックスには重複削除後のデータ数とデータの一覧、および重複の有無を表示します。
Sub sample_dc013_01() Dim dco As Object Dim wRow As Long Dim wKey As String Dim varKeys As Variant Dim i As Long 'ディクショナリオブジェクトの生成 Set dco = CreateObject("Scripting.Dictionary") wRow = 1 Do Until Cells(wRow, 1).Value = "" wKey = Cells(wRow, 1).Value If dco.Exists(wKey) Then '登録済みの場合はカウントアップ dco.Item(wKey) = CLng(dco.Item(wKey)) + 1 Else '未登録の場合は新規登録 'Value値はカウンターとして使用したいので、"1"をセット dco.Add wKey, 1 End If wRow = wRow + 1 Loop 'キー項目の配列を取得 varKeys = dco.Keys 'カウント値から重複の有無を判定 For i = 0 To UBound(varKeys) If dco.Item(varKeys(i)) > 1 Then 'カウント値が1より大きければ重複あり varKeys(i) = varKeys(i) & vbTab & "(重複あり)" End If Next MsgBox "<重複データ削除結果>" & vbLf & _ "重複削除後データ数・・・" & dco.count & "件" & _ vbLf & vbLf & Join(varKeys, vbLf), vbInformation 'ディクショナリオブジェクトの破棄 Set dco = Nothing End Sub

