📊 Excel VBA Top100
🔄

NormalizeData

データ処理

選択範囲のテキストを正規化します(全角英数字→半角、前後スペース削除)

データの表記ゆれを修正して統一形式に整えるマクロです。全角・半角の統一・大文字小文字の統一・前後の余分なスペースの除去・改行コードの削除などを一括実行します。異なるシステムや担当者から集めたデータは表記ゆれが多く、そのままでは集計やVLOOKUPがうまく動作しないことがあります。このマクロでデータを正規化することで、後続の処理精度を大幅に向上させることができます。全角英数字の半角化と前後スペースの除去という、日本語データ特有の表記ゆれ2大原因をまとめて解消します。この処理を挟むだけでVLOOKUPの照合成功率が劇的に改善するケースは多く、「関数は正しいのに一致しない」という時間を奪うトラブルの特効薬になります。TrimSpaces・ConvertTextToNumbersと合わせて「インポート後の三点セット」として運用すると、データ品質が安定します。

NormalizeData デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 正規化したいセル範囲を選択してから NormalizeData を実行します

🎯 活用シーン

  • ✓複数の担当者が異なる表記(全角・半角、大文字・小文字など)でデータ入力したリストを統一フォーマットに整形したいとき
  • ✓異なるシステムからエクスポートしたデータをマージする前に、表記ゆれを解消して照合精度を高めたいとき
  • ✓VLOOKUP関数が想定通りに動作しない原因となっている全角スペースや全角文字を一括で正規化したいとき
  • ✓複数店舗から集まる日報データの商品コード表記を統一して、本部での自動集計を安定させたいとき
  • ✓名簿の氏名欄に混在する全角スペース・半角スペースを整えて、姓名分割や重複チェックの精度を上げたいとき

💡 実装のヒント

  • ▸正規化処理は元のデータを上書きします。処理前に必ずバックアップを取るか、別シートにコピーしてから実行することをお勧めします。
  • ▸全角数字が含まれるデータを集計に使う場合は、正規化で半角数字に変換した上でConvertTextToNumbersを実行すると確実です。
  • ▸郵便番号や電話番号などのフォーマットが混在している場合は、正規化後に別途フォーマット統一のマクロを組み合わせて使用してください。
  • ▸照合キーになる列(ID・コード・氏名など)だけでも正規化しておくと、シート間参照のトラブルが激減します。
  • ▸カタカナの全角半角統一が必要な場合は、コードにStrConv関数の変換を1行追加するだけで対応できます。

💻 VBAコード

' NormalizeData
' -----------------
' Macro Name: NormalizeData
' Description: 選択範囲のテキストを正規化します(全角英数字→半角、前後スペース削除)
' Parameters: なし
' Returns: なし
' Usage: 正規化したいセル範囲を選択してから NormalizeData を実行します
' -----------------

Sub NormalizeData()
    On Error GoTo ErrorHandler

    Dim rng As Range
    Dim cell As Range
    Dim normalizedCount As Long
    Dim original As String

    If TypeName(Selection) <> "Range" Then
        MsgBox "セル範囲を選択してから実行してください", vbCritical, "エラー"
        Exit Sub
    End If

    Set rng = Selection
    normalizedCount = 0

    For Each cell In rng
        If Not IsEmpty(cell) And VarType(cell.Value) = vbString Then
            original = cell.Value
            cell.Value = Trim(StrConv(cell.Value, vbNarrow))
            If cell.Value <> original Then normalizedCount = normalizedCount + 1
        End If
    Next cell

    MsgBox normalizedCount & " セルを正規化しました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub