📊 Excel VBA Top100
⚡

BatchRename

自動化

A列にある文字列を一括でB列の文字列に置換してC列に出力します

指定したルールに基づいてシート内のデータに記載されたファイル名や識別名を一括変換するマクロです。プレフィックスの追加・日付の付加・番号の置換など、一定のルールに従った名前変換を大量に処理できます。ファイル名の一括変更やデータベースの名称統一など、繰り返し作業の自動化に役立ちます。変換ルールはExcelシート上で管理できるため、業務ルールの変更にも柔軟に対応できます。内部ではシート上に定義した変換ルール(Find/Replaceペア)をループで適用し、Replace関数を使って対象セルの文字列を一括変換しています。実際のファイル名を変更する場合はFileSystemObjectと組み合わせる拡張が必要ですが、シート上のデータ名称統一だけであればこのままの構成で十分対応できます。手作業での置換に比べ、数千件規模のデータでも一瞬で処理が完了する点が大きな強みです。

BatchRename デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: A列に元の文字列、B列に新しい文字列を入力してから BatchRename を実行します

🎯 活用シーン

  • ✓プロジェクト管理シートに記載された多数のファイル名にプロジェクトコードのプレフィックスを一括追加して命名規則を統一したいとき
  • ✓商品マスターの商品名称を新しい命名規則に従って一括変換して、システム移行に対応したいとき
  • ✓年度更新の際に資料名に含まれる年度を前年度から当年度に一括変換して、更新作業を効率化したいとき
  • ✓組織改編で部署コードの命名規則が変わった際に、過去データの部署名を一括で新ルールに変換したいとき
  • ✓取引先コードの体系が変更になった場合に、既存の受発注データを新コードへ一括置換したいとき

💡 実装のヒント

  • ▸変換ルールを別シートやセル範囲に記載しておくことで、ルールの変更や追加が容易になります。
  • ▸実際のファイル名変更(OSのファイルシステムへの操作)を伴う場合は、FileSystemObjectオブジェクトと組み合わせる必要があります。
  • ▸一括変換の前に変換プレビューを表示する機能を追加すると、意図しない変換を防げます。
  • ▸変換ルールに正規表現的なワイルドカードを使いたい場合は、Like演算子や自作の文字列判定ロジックを組み込んでください。
  • ▸変換前後の対応表を別シートに残しておくと、誤変換が起きた際の原因調査がしやすくなります。

💻 VBAコード

' BatchRename
' -----------------
' Macro Name: BatchRename
' Description: A列にある文字列を一括でB列の文字列に置換してC列に出力します
' Parameters: なし
' Returns: なし
' Usage: A列に元の文字列、B列に新しい文字列を入力してから BatchRename を実行します
' -----------------

Sub BatchRename()
    On Error GoTo ErrorHandler

    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim renamedCount As Long

    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    If lastRow < 2 Then
        MsgBox "A列に元の文字列、B列に新しい文字列を入力してください", vbCritical, "エラー"
        Exit Sub
    End If

    ws.Cells(1, 3).Value = "結果"
    renamedCount = 0

    For i = 2 To lastRow
        Dim original As String
        Dim renamed As String
        original = CStr(ws.Cells(i, 1).Value)
        renamed = CStr(ws.Cells(i, 2).Value)
        If original <> "" And renamed <> "" Then
            ws.Cells(i, 3).Value = renamed
            renamedCount = renamedCount + 1
        End If
    Next i

    MsgBox renamedCount & " 件を処理しました(C列に出力)", vbInformation, "完了"

    Exit Sub

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