タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

Excel VBAで重複データを簡単に処理!連想配列

VBA

t f B! P L

 

ハングドマン

Excelでデータを整理するとき、特にリスト内に重複データが含まれていると、効率的な処理が難しくなります。今回は、Excel VBAの「Dictionary」オブジェクトを使って、重複データを取り除き、簡単に整理する方法をご紹介します。実際のVBAコードを解説しながら、データの取り扱い方を学んでいきましょう。

 VBAコードの全体像

今回紹介するコードでは、Excelのシート上で6行目から10行目にかけて入力されたデータを処理し、重複するデータを除外したうえで、結果を新たな列に出力します。

 

まずはコード全体を確認してみましょう。

 

Sub RENSOU()

    Set dic = CreateObject("Scripting.Dictionary")

 

    For i = 6 To 10

        pn = Cells(i, 1).Value

        pp = Cells(i, 2).Value

        If Not dic.exists(pn) Then

            dic.Add pn, pp

        End If

    Next

 

    a = 1

 

    For Each rr In dic.keys

        Cells(a, 5).Value = rr

        Cells(a, 6).Value = dic(rr)

        a = a + 1

    Next

 

    AA = dic.Count

 

    MsgBox AA

End Sub

では、このコードが具体的に何をしているのか、段階を追って解説していきます。

 

1. Dictionaryオブジェクトの作成

まず最初に登場するのが Dictionary というオブジェクトです。これはキーと値のペアでデータを管理する強力なコレクションです。

 

Set dic = CreateObject("Scripting.Dictionary")

この一文で Dictionary オブジェクトを作成しています。このオブジェクトは、キーとそれに対応する値を登録し、キーが重複する場合は無視するため、重複データを排除する際に非常に役立ちます。

 

2. セルのデータを読み込み、Dictionary に追加

次に、ExcelA列(1列目)とB列(2列目)の6行目から10行目までのデータを処理します。

 

For i = 6 To 10

    pn = Cells(i, 1).Value

    pp = Cells(i, 2).Value

    If Not dic.exists(pn) Then

        dic.Add pn, pp

    End If

Next

pn A列の値(データのキー)を取得します。

pp B列の値(データの値)を取得します。

ここで重要なのは、If Not dic.exists(pn) Then という条件文です。これは、Dictionary の中にすでに同じキー(A列の値)が存在するかどうかを確認しています。もし存在しない場合にのみ、そのキーと対応する値を追加します。これにより、重複するデータが登録されるのを防ぎます。

 

3. 結果をExcelの新しい列に出力

次に、Dictionary に保存されたデータを新しい列(E列とF列)に出力します。

 

a = 1

 

For Each rr In dic.keys

    Cells(a, 5).Value = rr

    Cells(a, 6).Value = dic(rr)

    a = a + 1

Next

For Each rr In dic.keys で、Dictionary に保存されたすべてのキーを1つずつ取り出します。

Cells(a, 5).Value = rr は、キー(A列の値)をE列に出力します。

Cells(a, 6).Value = dic(rr) は、対応する値(B列の値)をF列に出力します。

ループのたびに a 1ずつ増やし、次の行にデータを入力していきます。

4. Dictionary に保存されたデータの数を表示

最後に、Dictionary に保存されたデータの数(キーの数)をメッセージボックスで表示します。

 

AA = dic.Count

MsgBox AA

この部分では、重複を排除した結果として、いくつのデータが保存されたかをユーザーに知らせます。dic.Count で、Dictionary に登録されたキーの総数が取得できます。

 

実行例

このコードがどのように動作するのか、具体的なデータを例に説明します。

 

例えば、Excelシートに以下のデータがあるとします。

 

A (pn)             B (pp)

item1         10

item2         20

item1         30

item3         40

item2         50

この状態でVBAコードを実行すると、重複する item1 item2 が一度しか出力されません。結果的に、以下のような出力が得られます(E列とF列に出力される)。

 

E (pn)             F (pp)

item1         10

item2         20

item3         40

最後に、メッセージボックスには「3」という数値が表示され、3つの一意のデータが存在することが確認できます。

 まとめ

このVBAコードは、Excel上で重複データを簡単に処理するための非常にシンプルかつ有効な方法を提供します。特に、Dictionary オブジェクトを利用することで、重複するキーを簡単に排除できる点が強力です。また、整理されたデータを新しい列に出力するため、視覚的にも確認しやすくなります。

もし、Excelでのデータ整理に時間をかけている方や、手作業で重複をチェックしている方は、このVBAコードを参考にして、作業効率を大幅に向上させてください!

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ