Excelでデータを整理するとき、特にリスト内に重複データが含まれていると、効率的な処理が難しくなります。今回は、Excel VBAの「Dictionary」オブジェクトを使って、重複データを取り除き、簡単に整理する方法をご紹介します。実際のVBAコードを解説しながら、データの取り扱い方を学んでいきましょう。
Contents[非表示]
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 に追加
次に、ExcelのA列(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コードを参考にして、作業効率を大幅に向上させてください!
0 件のコメント:
コメントを投稿