エクセルVBA 同じ項目をまとめる(重複データの整理)コード作成

vbajyufukueyecatch

Dictionaryオブジェクト使って、リスト中の同じ項目をまとめる、重複データの整理するVBAコードを作成します。手法はいくつかありますが、簡潔で速い処理のコードになります。

今回は、同じ項目を一つにまとめるためのエクセルVBAコードを紹介します。

多数銘柄の商品を複数の店で扱っている場合、商品銘柄集計表を作るには、商品銘柄の種類だけをリストにしないといけません。普通に考えても面倒です。

こんにちは、じゅんぱ店長(@junpa33)です。

エクセルVBA 同じ項目をまとめる(重複データの整理)

vbajyufukusetup003

結構、実務上のエクセル操作で同じ項目を「ひとつにまとめたいなぁ!」という時があります。

出来そうで出来ない、力わざで出来ても大変時間がかかるなんてことがありますよね。

例えば「並び替え」をして重複項目を一個ずつ削除するとか・・・

今回の例題は、そんなチョッと悩ましいパターンのものを準備しました。

VBAコードの作成は面倒くさいし「力わざの並び替え削除」も出来そうなリストです。

今回の例題

今回は日ごとに販売した雑誌リストの積み上げという想定で、

雑誌名と雑誌コードを一覧表化しています。

この表を重複データの整理をしてD列とE列に表示したいと思います。

vbajyufukusetu001

Dictionaryオブジェクトを使います

エクセルVBAで問題解決していくのに、Dictionaryオブジェクト(連想配列)を使います。配列としてはキーとデータが1ペアとなります。

キーは、言えば「見出し」的なもので、重複をしてはいけません。(重複させようとしたときはエラーになります。)

データは、そのキーに紐づいた値になります。こちらは、重複してるかどうかは問いません

そして、この配列のインデックス番号は0から始まります。

構文

CreateObject関数でDictionaryオブジェクトを指定します。

CreateObject(“Scripting.Dictionary”)

Setステートメントで戻り値をオブジェクト変数をオブジェクト変数に代入する。

Set オブジェクト変数 = CreateObject(“Scripting.Dictionary”)

メソッド

オブジェクト変数. Add Key, Item・・・キーとデータをペアで配列にして追加します。

オブジェクト変数. Keys ・・・キーを配列にして返します。

オブジェクト変数. Items・・・キーに紐づいたデータを配列にして返します。

同じ項目をまとめる重複整理のVBAコード

同じ項目をまとめるコード

今回の例題は、連想配列の基本構文的なものになっています。

ほぼコピペそのままで転用してもらえると思います。

重複を整理した連想配列の値を、表示するセルをどこにするかは、

お望みで、別シートとか別BOOKとかも指定いただければと思います。

VBA
Option Explicit

Sub 雑誌名重複整理()
    Dim Arow As Long
    Dim i As Long, j As Long
    Dim myDic As Object
    Dim mykeys, myItems
'Setステートメントで戻り値をオブジェクト変数に代入する
        Set myDic = CreateObject("Scripting.Dictionary")
'A列でリストの最終行を調べる
        Arow = Cells(Rows.Count, 1).End(xlUp).Row
'連想配列、キー重複の時エラーを無視
        On Error Resume Next
        For i = 2 To Arow
'連想配列、キーとデータを追加する
            myDic.Add Worksheets("Sheet1").Cells(i, 1).Value, _
                Worksheets("Sheet1").Cells(i, 2).Value
        Next i
        For j = 0 To myDic.Count - 1
            mykeys = myDic.keys
            myItems = myDic.Items
'キーとデータをセルに表示する
            Range("D" & j + 2).Value = mykeys(j)
            Range("E" & j + 2).Value = myItems(j)
        Next j
'オブジェクトを解放する
        Set myDic = Nothing
End Sub

実行結果

赤枠部分に重複をまとめた項目が表示されました。

vbajyufukusetu002

重複データの整理 コード作成のまとめ

vbajyufukusetup004

「同じ項目をまとめる(重複データの整理)」を行うエクセルVBAコードは、これ以外にも作成方法があります。

けれども、コード作成行数的にも処理スピード的にもこの手法が一番お手軽かなというのが感想です。

自分たちは、実務派の身なので、同じ作業のために幾つも覚える必要はないと思います。

Dictionaryオブジェクトでキーを取り出したら、他にそのキーに紐づく値などは、「Match関数」で引っ張ってくることが出来ます。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。