Excel VBA | 配列 + Dictionary を組み合わせた高速処理

VBA
スポンサーリンク

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+日付」をキーにして勤怠集計など。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました