アクセス上位ページ
 
最近の更新内容

Excel VBA ≫ 4.DCO - 概要と使用例(1)-c.重複データの削除

ディクショナリオブジェクトを使用した重複データの削除

このページではディクショナリオブジェクトを使用した重複データの削除について説明します。 重複データの削除は、データの存在チェックや追加が簡単に行えるディクショナリオブジェクトを使用すると簡単に行うことができます。

<重複データ削除処理の流れ>
  1. データがディクショナリオブジェクトに登録済みか Exists メソッドでチェックする。
  2. 登録済みでなければ、ディクショナリオブジェクトへデータを新規登録(Add)する。
    登録済みの場合は必要に応じて何か処理(カウント数を加算するなど)を行う。
  3. 最後に 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
    
    ⇒ サンプルマクロ集 へ

  • <入力データ>
  • sample_dc013_01の入力データ
  • <マクロ実行結果>
  • sample_dc013_01の実行結果

カテゴリ内ページ



Page
Top