Excel VBA 逆引き集 | 実務テンプレ完全版(超再利用部品) – 一括変換ツール

Excel VBA
スポンサーリンク

一括変換ツールのねらい:大量データを「一気に整形・変換」する“作業自動化の核”

一括変換ツールは、実務で最も“時短効果が高い”テンプレのひとつです。
現場では、こんな作業が毎日のように発生します。

  • 全角 → 半角にしたい
  • ひらがな → カタカナにしたい
  • 文字列の前後スペースを削除したい
  • 電話番号からハイフンを除去したい
  • 日付の書式を統一したい
  • 特定の文字を置換したい(例:㈱ → 株式会社)

これを手作業でやると、地味に時間がかかり、ミスも出ます。
一括変換ツールは、こうした「大量のセルに同じ変換をかける作業」を、
ボタン1つで一気に処理できる“変換エンジン”としてテンプレ化するものです。


設計の基本:変換処理を「関数化」し、範囲に一括適用する

一括変換の考え方

一括変換ツールは、次の2段構えで作ると強力になります。

  1. 変換ロジック(1セルをどう変換するか)を関数として作る
  2. その関数を、選択範囲やシート全体に適用する処理を作る

この構造にしておくと、

  • 全角→半角
  • 文字置換
  • 正規化
  • 数値変換
  • 日付変換

など、どんな変換でも「関数を差し替えるだけ」で使い回せます。


変換ロジックのテンプレ:1セルを変換する関数

例:全角 → 半角 + 前後スペース削除

' ModConvert_Functions.bas
Option Explicit

Public Function Convert_NormalizeBasic(ByVal s As String) As String
    Dim t As String
    t = s
    
    t = StrConv(t, vbNarrow)        ' 全角 → 半角
    t = Trim$(t)                    ' 前後スペース削除
    t = Replace(t, " ", "")        ' 全角スペース除去
    
    Convert_NormalizeBasic = t
End Function
VB

例:会社名の表記ゆれを統一(㈱ → 株式会社)

Public Function Convert_CompanyName(ByVal s As String) As String
    Dim t As String
    t = s
    
    t = Replace(t, "㈱", "株式会社")
    t = Replace(t, "(株)", "株式会社")
    t = Replace(t, "(株)", "株式会社")
    
    t = Replace(t, "㈲", "有限会社")
    t = Replace(t, "(有)", "有限会社")
    t = Replace(t, "(有)", "有限会社")
    
    Convert_CompanyName = t
End Function
VB

例:電話番号のハイフン除去

Public Function Convert_TelNumber(ByVal s As String) As String
    Dim t As String
    t = s
    t = Replace(t, "-", "")
    t = Replace(t, "ー", "")
    Convert_TelNumber = t
End Function
VB

ここでの重要ポイントは、
変換ロジックは「1セルだけ」を対象にする
ということです。

この“1セル変換関数”を積み上げていくことで、
どんな変換でも「組み合わせて使える」ようになります。


一括変換エンジン:選択範囲に変換関数を適用する

選択範囲を一括変換する汎用テンプレ

' ModConvert_Apply.bas
Option Explicit

Public Sub ApplyConvert_ToSelection(ByVal convertFunc As String)
    Dim rng As Range
    On Error Resume Next
    Set rng = Selection
    On Error GoTo 0
    
    If rng Is Nothing Then
        MsgBox "変換したい範囲を選択してください。", vbInformation
        Exit Sub
    End If
    
    Dim cell As Range
    For Each cell In rng
        If Not IsEmpty(cell.Value) Then
            cell.Value = Application.Run(convertFunc, CStr(cell.Value))
        End If
    Next
    
    MsgBox "一括変換が完了しました。", vbInformation
End Sub
VB

ここでの重要ポイントは、

  • convertFunc に「関数名」を文字列で渡す
  • Application.Run でその関数を実行する

という仕組みです。

これにより、

Call ApplyConvert_ToSelection("Convert_NormalizeBasic")
Call ApplyConvert_ToSelection("Convert_CompanyName")
Call ApplyConvert_ToSelection("Convert_TelNumber")
VB

のように、
どの変換関数でも同じエンジンで一括変換できる
という強力な構造になります。


例題:会社名の表記ゆれを一括で統一する

実行用のラッパー Sub

Public Sub Run_Convert_CompanyName()
    Call ApplyConvert_ToSelection("Convert_CompanyName")
End Sub
VB

使い方は簡単です。

  1. 会社名の列を選択する
  2. ボタン(Run_Convert_CompanyName)を押す
  3. ㈱ → 株式会社、(有) → 有限会社 などが一括で変換される

これだけで、名寄せ前の前処理が一気に楽になります。


例題:全角 → 半角 + スペース除去を一括で行う

Public Sub Run_Convert_NormalizeBasic()
    Call ApplyConvert_ToSelection("Convert_NormalizeBasic")
End Sub
VB

これを実行すると、

  • 全角英数字 → 半角
  • 全角スペース → 削除
  • 前後スペース → 削除

が一括で行われます。

顧客名、住所、メールアドレスなど、
「まずは正規化したい」列に対して非常に有効です。


例題:電話番号のハイフン除去を一括で行う

Public Sub Run_Convert_TelNumber()
    Call ApplyConvert_ToSelection("Convert_TelNumber")
End Sub
VB

電話番号の列を選択して実行すると、

090-1234-5678 → 09012345678
03-1234-5678 → 0312345678

のように、すべての行が一括で変換されます。


応用:複数の変換を「まとめて」かける複合変換

1セルに対して複数の変換を連続でかける

例えば、

  • 全角 → 半角
  • 株式会社表記統一
  • スペース除去

をまとめてやりたい場合は、
複合変換関数を作ります。

Public Function Convert_CompanyFullNormalize(ByVal s As String) As String
    Dim t As String
    t = Convert_NormalizeBasic(s)
    t = Convert_CompanyName(t)
    Convert_CompanyFullNormalize = t
End Function
VB

これを一括変換エンジンに渡せばOKです。

Public Sub Run_Convert_CompanyFullNormalize()
    Call ApplyConvert_ToSelection("Convert_CompanyFullNormalize")
End Sub
VB

これで、
「会社名の完全正規化」
がボタン1つで完了します。


応用:シート全体・特定列だけを一括変換する

シート全体に変換をかける版

Public Sub ApplyConvert_ToSheet(ByVal ws As Worksheet, ByVal convertFunc As String)
    Dim rng As Range
    Set rng = ws.UsedRange
    
    Dim cell As Range
    For Each cell In rng
        If Not IsEmpty(cell.Value) Then
            cell.Value = Application.Run(convertFunc, CStr(cell.Value))
        End If
    Next
End Sub
VB

特定列だけに変換をかける版

Public Sub ApplyConvert_ToColumn(ByVal ws As Worksheet, ByVal col As Long, ByVal convertFunc As String)
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, col).End(xlUp).Row
    
    Dim r As Long
    For r = 2 To lastRow
        If Not IsEmpty(ws.Cells(r, col).Value) Then
            ws.Cells(r, col).Value = Application.Run(convertFunc, CStr(ws.Cells(r, col).Value))
        End If
    Next
End Sub
VB

これで、

  • 会社名列だけ正規化
  • 電話番号列だけハイフン除去
  • メールアドレス列だけ小文字化

など、柔軟な運用ができます。


重要ポイントの深掘り:一括変換ツールを“実務で使える”形にするコツ

変換は「破壊的」なので、必ずバックアップを取る

一括変換は、元の値を上書きします。
Undo(元に戻す)が効かないケースもあるため、
変換前に必ずバックアップを取る
という運用ルールが必須です。

変換関数は「小さく」「組み合わせ可能」にする

1つの関数に全部詰め込むと、
後から修正しづらくなります。

  • 全角→半角
  • スペース除去
  • 株式会社表記統一

など、1つの目的につき1関数にしておくと、
組み合わせて使える“再利用部品”になります。

変換対象の列を明確にする

実務では、

  • 会社名は正規化したい
  • 住所は変換したくない
  • メールアドレスは小文字化したい

など、列ごとにルールが違います。

「どの列にどの変換をかけるか」を
シートに設定表として持つ
という運用もよくあります。


まとめ:一括変換ツールは「変換関数 × 適用エンジン」の組み合わせで無限に拡張できる

一括変換ツールの本質は、

  • 1セルを変換する関数を作る
  • その関数を範囲に適用するエンジンを作る
  • 必要に応じて複合変換を作る

という“部品化”です。

この型さえ作っておけば、

  • 名寄せ前の正規化
  • マスタ更新前の前処理
  • CSV取り込み後の整形
  • 住所・会社名・電話番号の統一
  • 全角・半角の統一

など、あらゆる「データ整形作業」がボタン1つで終わるようになります。

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