キーの正規化(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を使った検索や集計を 安全かつ確実 に実務へ応用できます。
