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

vbajyufukueyecatch

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

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

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

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

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

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

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

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

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

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

今回の例題

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

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

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

vbajyufukusetu001

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

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

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

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

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

構文

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

CreateObject(“Scripting.Dictionary”)

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

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

メソッド

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

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

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

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

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

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

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

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

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

コード
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

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

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

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

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

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

MEMO

Match関数について詳しくはこちらになります。

vbamatcheyecatch001エクセルVBAで使うMatch関数 活用度アップでテッパン関数に!

For~Nextの使い方については、この記事も参考にしてください。

fornextirekoeyecatchエクセルVBA!For~Nextのループと入れ子構造をVBA最速理解

データ入力セルの最終行番号を取得する方法については、この記事を参考にしてください。

vbalastcelleyecatchデータ入力済セルの最終行番号を取得する

短期間でエクセルVBAの独学習得を目指したいなら

エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。

けれども、

出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。

独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。

先人が行った勉強方法をあなたがそのまま利用すればよいということです。

独習のための大切な7つのポイントは、上記記事にて解説しています。

重要ワード

独習によるVBA習得のキーワードは、

出来るだけ多くの実例に触れること!

です。

正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。

ハッキリ言って、

本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、

手っ取り早く短期間習得できるというのは間違いないでしょう。

このブログでよく使うVBAのコードのトピックを纏めています。

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

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

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