Excel VBAで「重複排除」「検索」「集計」を 配列 + Dictionary で最適化する具体的なコードパターンを整理しました。これを使えば数万行でも一瞬で処理できます。
1. 重複排除(Unique抽出)
Sub RemoveDuplicatesFast()
Dim ws As Worksheet, arr As Variant, dict As Object
Dim i As Long, result As Variant
Set ws = ThisWorkbook.Sheets("Sheet1")
arr = ws.Range("A1:A10000").Value ' 一括読み込み
Set dict = CreateObject("Scripting.Dictionary")
' 配列を走査してDictionaryに格納(キー重複は自動排除)
For i = 1 To UBound(arr, 1)
dict(arr(i, 1)) = 1
Next
' 結果を配列に戻す
result = Application.Transpose(dict.Keys)
ws.Range("C1").Resize(dict.Count, 1).Value = result
End Sub
VB👉 ポイント
Range.Valueで一括読み込み- Dictionaryのキーに入れるだけで重複排除
2. 検索(VLOOKUP代替)
Sub FastLookup()
Dim ws As Worksheet, arr As Variant, dict As Object
Dim i As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
arr = ws.Range("A1:B10000").Value ' IDと名前の表
Set dict = CreateObject("Scripting.Dictionary")
' ID → 名前 のマッピング
For i = 1 To UBound(arr, 1)
dict(arr(i, 1)) = arr(i, 2)
Next
' 高速検索(例: ID123を探す)
MsgBox dict("ID123")
End Sub
VB👉 ポイント
- VLOOKUPより圧倒的に速い
- 数万件でも瞬時に検索可能
3. 集計(頻度カウント)
Sub FrequencyCountFast()
Dim ws As Worksheet, arr As Variant, dict As Object
Dim i As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
arr = ws.Range("A1:A10000").Value ' データ列
Set dict = CreateObject("Scripting.Dictionary")
' 出現回数をカウント
For i = 1 To UBound(arr, 1)
If dict.Exists(arr(i, 1)) Then
dict(arr(i, 1)) = dict(arr(i, 1)) + 1
Else
dict(arr(i, 1)) = 1
End If
Next
' 結果を出力
ws.Range("C1").Resize(dict.Count, 1).Value = Application.Transpose(dict.Keys)
ws.Range("D1").Resize(dict.Count, 1).Value = Application.Transpose(dict.Items)
End Sub
VB👉 ポイント
- 配列で走査 → Dictionaryでカウント
- ピボットテーブル不要で高速集計
高速化の鉄則まとめ
- セルを直接操作しない → 配列に一括読み込み
- Dictionaryで検索・重複排除・集計
- 結果を配列に戻して一括書き込み
このパターンを使えば、Excel VBAでのデータ処理は劇的に速くなります。
💡 さらに最適化するなら「複数列のキーを組み合わせて検索・集計」も可能です。例えば「社員ID+日付」をキーにして勤怠集計など。


