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

vbajyufukueyecatch

エクセルVBAを使って、リスト中の同じ項目をまとめる、重複データの整理する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関数について詳しくはこちらになります。

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

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

エクセルVBA!For~Nextの入れ子ループを最速に理解する

 

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

 

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

けれども、

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

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

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

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

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

重要ワード

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

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

です。

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

ハッキリ言って、

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

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

 

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

「VBA最速理解」の記事一覧を開く

 

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

 

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