Excel VBA 逆引き集 | キーの正規化

Excel VBA
スポンサーリンク

キーの正規化(Dictionaryで安全に扱うために)

Dictionaryを使うとき、キーの表記ゆれ(大文字・小文字、前後のスペース、全角半角など)があると、同じものなのに別キーとして扱われてしまいます。これを防ぐために「キーの正規化」を行います。初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • 正規化とは?
    キーを登録・検索する前に、一定のルールで整形すること。
  • よくある正規化方法:
    • 大文字小文字を統一 → UCase / LCase
    • 前後の空白を削除 → Trim
    • 全角半角を統一 → StrConv
  • メリット:
    • 「ABC」と「abc」を同じキーとして扱える。
    • 「 123 」や「123」も同じキーになる。
    • データの揺れを吸収して安全に検索できる。

テンプレ1:大文字小文字を統一

Function NormalizeKey(key As String) As String
    NormalizeKey = UCase(Trim(key))
End Function

Sub Dict_NormalizeKey()
    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")

    ' 正規化して追加
    dict(NormalizeKey("abc")) = "りんご"
    dict(NormalizeKey("ABC")) = "みかん"

    ' 出力
    Dim k As Variant
    For Each k In dict.Keys
        Debug.Print k, dict(k)
    Next k
End Sub
VB
  • 結果: ABC みかん → 「abc」と「ABC」が同じキーとして扱われる。

テンプレ2:前後の空白を削除

Function NormalizeKeyTrim(key As String) As String
    NormalizeKeyTrim = Trim(key)
End Function

Sub Dict_NormalizeTrim()
    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")

    dict(NormalizeKeyTrim(" 123 ")) = "商品A"
    dict(NormalizeKeyTrim("123")) = "商品B"

    Debug.Print "キー数=" & dict.Count ' → 1
End Sub
VB
  • ポイント: 前後の空白を削除して同じキーに。

テンプレ3:全角半角を統一

Function NormalizeKeyZenkaku(key As String) As String
    ' 半角に統一
    NormalizeKeyZenkaku = StrConv(Trim(key), vbNarrow)
End Function

Sub Dict_NormalizeZenkaku()
    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")

    dict(NormalizeKeyZenkaku("ABC")) = "商品A"
    dict(NormalizeKeyZenkaku("ABC")) = "商品B"

    Debug.Print "キー数=" & dict.Count ' → 1
End Sub
VB
  • ポイント: 全角「ABC」と半角「ABC」を同じキーに。

テンプレ4:複合的な正規化(大文字化+Trim+半角化)

Function NormalizeKeyAll(key As String) As String
    NormalizeKeyAll = UCase(StrConv(Trim(key), vbNarrow))
End Function

Sub Dict_NormalizeAll()
    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")

    dict(NormalizeKeyAll(" abc ")) = "りんご"
    dict(NormalizeKeyAll("ABC")) = "みかん"

    Debug.Print "キー数=" & dict.Count ' → 1
End Sub
VB
  • ポイント: 複数の正規化を組み合わせて、表記ゆれを徹底的に吸収。

例題で練習

'例1:大文字小文字を統一
Sub Example1()
    Dict_NormalizeKey
End Sub

'例2:前後の空白を削除
Sub Example2()
    Dict_NormalizeTrim
End Sub

'例3:全角半角を統一
Sub Example3()
    Dict_NormalizeZenkaku
End Sub

'例4:複合的な正規化
Sub Example4()
    Dict_NormalizeAll
End Sub
VB

初心者向けポイント

  • キーの揺れは危険 → 同じものが別キーになり、検索や集計が狂う。
  • Normalize関数を作る → 登録・検索の前に必ず通す。
  • Trim / UCase / StrConvを組み合わせる → 空白・大文字小文字・全角半角を統一。
  • 実務で便利 → 顧客コードや商品コードの表記ゆれを防ぎ、安定した検索・集計が可能。

👉 この「キーの正規化テンプレ」を覚えておけば、Dictionaryを使った検索や集計を 安全かつ確実 に実務へ応用できます。

タイトルとURLをコピーしました