「はぁ……またこの作業か。1万行もある顧客リストから重複を消してって言われても、目がチカチカするよ。Excelの標準機能だと、たまに動作が重くて固まるし……。もっとスマートに、一瞬で終わらせる方法はないのかな?」
職場で、こんな風に感じたことはありませんか?
私もかつて、目視と並べ替えで必死に重複チェックをしていた一人です。
1週間かけてリストを完成させたのに、後から 重複が見つかって、再チェックする羽目になる……という苦い経験も少なくありません。
そんな私を救ってくれたのが、Excel VBAのDictionaryというテクニックでした。
今回は、プログラミング初心者の方でもコピペで使える、重複削除術を紹介します。
標準機能の「重複の削除」では不十分な理由
もちろん、Excelには「重複の削除」ボタンがあります。でも、実務では以下の壁にぶつかります。
- 数万件規模のデータでは処理が追いつかず、フリーズのリスクがある。
- 削除するだけでなく、抽出したデータをプログラム内でさらに活用したい。
- 複数列の組み合わせなど、複雑な条件での抽出を行いたい。
Dictionaryを活用すれば、PCへの負荷を最小限に抑えつつ、超高速で処理が可能です。
3. 【コピペOK】今すぐ使える高速重複削除コード
以下のコードをVBAのエディタに貼り付けるだけで、A列の重複を消してC列に書き出します。
Sub CreateUniqueList()
Dim myDic As Object
Set myDic = CreateObject("Scripting.Dictionary")
Dim lastRow As Long
Dim i As Long
Dim targetValue As Variant
' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' A列の2行目から順番にチェック
For i = 2 To lastRow
targetValue = Cells(i, 1).Value ' 今見ているセルの値
If Not myDic.Exists(targetValue) Then
myDic.Add targetValue, "" ' キーとして追加(値は空でOK)
End If
Next i
' C列に結果を書き出す(Keysが重複のないリスト本体)
Dim myKeys As Variant
myKeys = myDic.Keys
For i = 0 To UBound(myKeys)
Cells(i + 2, 3).Value = myKeys(i)
Next i
MsgBox "重複削除が完了しました!"
' 後片付け
Set myDic = Nothing
End Sub
注意点
非常に便利なDictionaryですが、一つだけ注意点があります。
それは、英字の大文字と小文字を区別するという特性です。
例えば「Apple」と「apple」は、別のデータとして認識されます。
実務でこれらを同一視したい場合は、事前にLCase関数などで小文字に統一してから格納するか、比較モードをテキスト比較に設定して対応することをお勧めします。
まとめ
「Dictionary」をマスターすることは、バックオフィス業務において「手斧」を「チェーンソー」に持ち替えるようなものです。
最初はコードに難しさを感じるかもしれませんが、一度習得すれば業務効率は飛躍的に向上します。
ぜひ試してみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。


コメント