Excel VBA 逆引き集 | Trim・大文字小文字の統一

Excel VBA
スポンサーリンク

Trim・大文字小文字の統一

Excelで「コード」「ID」「名前」などを突合するときに、前後の空白大文字小文字の違いで一致しないことがよくあります。これを防ぐのが Trim(空白除去)大文字小文字の統一(UCase/LCase) です。初心者でもすぐ使えるテンプレをまとめました。


基本の関数

  • Trim
    文字列の前後の空白を削除します。 Trim(" ABC ") → "ABC"
  • UCase
    文字列をすべて大文字にします。 UCase("abc") → "ABC"
  • LCase
    文字列をすべて小文字にします。 LCase("ABC") → "abc"

単一セルの処理例

Sub NormalizeCell()
    Dim ws As Worksheet: Set ws = Worksheets("Sheet1")
    Dim v As String
    
    v = ws.Range("A1").Value
    
    '前後空白を削除して大文字化
    v = UCase(Trim(v))
    
    ws.Range("B1").Value = v
End Sub
VB
  • ポイント
    • A1セルの値を「空白除去+大文字化」してB1に出力。
    • 小文字統一したい場合は LCase(Trim(v)) に変更。

列全体を一括正規化(監査用)

Sub NormalizeColumn()
    Dim ws As Worksheet: Set ws = Worksheets("Sheet1")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ws.Cells(1, "B").Value = "正規化キー"
    
    Dim r As Long
    For r = 2 To lastRow
        ws.Cells(r, "B").Value = UCase(Trim(ws.Cells(r, "A").Value))
    Next
End Sub
VB
  • ポイント
    • A列のコードを正規化してB列に出力。
    • 突合前に「正規化キー」を作っておくと一致しない原因が見える。

辞書やJOINでの利用(突合テンプレ)

Sub JoinWithNormalizedKeys()
    '明細: Sheet("明細") A=コード, B=数量
    'マスタ: Sheet("マスタ") A=コード, B=名称
    
    Dim vD As Variant: vD = Worksheets("明細").Range("A1").CurrentRegion.Value
    Dim vM As Variant: vM = Worksheets("マスタ").Range("A1").CurrentRegion.Value
    
    'マスタ辞書(正規化キー→名称)
    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
    Dim i As Long, k As String
    For i = 2 To UBound(vM, 1)
        k = UCase(Trim(CStr(vM(i, 1))))
        If Len(k) > 0 Then dict(k) = CStr(vM(i, 2))
    Next
    
    'JOIN出力
    Dim out() As Variant: ReDim out(1 To UBound(vD, 1), 1 To 3)
    out(1, 1) = "コード": out(1, 2) = "名称": out(1, 3) = "数量"
    
    Dim r As Long
    For r = 2 To UBound(vD, 1)
        k = UCase(Trim(CStr(vD(r, 1))))
        out(r, 1) = vD(r, 1)
        out(r, 3) = vD(r, 2)
        If dict.Exists(k) Then
            out(r, 2) = dict(k)
        Else
            out(r, 2) = "#N/A"
        End If
    Next
    
    Dim wsOut As Worksheet: Set wsOut = Worksheets.Add
    wsOut.Name = "突合結果"
    wsOut.Range("A1").Resize(UBound(out, 1), 3).Value = out
    wsOut.Columns.AutoFit
End Sub
VB
  • ポイント
    • 明細とマスタのキーを Trim+UCase で統一。
    • 未一致は「#N/A」で見える化。

よくある落とし穴と対策

  • 全角スペースが残る
    Trim は半角スペースのみ削除。全角スペースは Replace(s, " ", "") で除去。
  • 大小混在で一致しない
    UCase または LCase で必ず統一。
  • 数値と文字列の混在
    CStr で文字列化してから正規化。

例題で練習

'例1:セルの値をTrim+大文字化
Sub Example_NormalizeCell()
    NormalizeCell
End Sub

'例2:列全体を正規化して監査列を作成
Sub Example_NormalizeColumn()
    NormalizeColumn
End Sub

'例3:正規化キーで辞書JOIN
Sub Example_JoinNormalized()
    JoinWithNormalizedKeys
End Sub
VB

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