VBAで自動化 VBA一覧 セル・値の取得と貼り付け 置き換え

【VBA】文字列を一括置換する方法|Replaceメソッドで効率的にデータを整理するテクニック

Excelでデータを扱っていると、「同じ置換作業を何度も繰り返している」と感じたことはありませんか?
たとえば、

  • 商品名に含まれる特定の文字列をまとめて修正したい
  • 社名表記を「株式会社」から「(株)」に一括で統一したい
  • 余計なスペースや記号をすべて削除したい

こうした作業を手作業で行うのは非効率です。
しかし、VBAのReplaceメソッドを使えば、文字列の一括置換を一瞬で自動化できます。

この記事では、Replaceメソッドの基本構文から、シート全体・複数条件・列単位・正規表現など、実務に役立つ応用までを徹底解説します。

✅ Replaceメソッドで文字列を置換する基本構文

・Replaceメソッドとは?

VBAのReplaceメソッドは、文字列の中に含まれる特定の文字列を別の文字列に置き換えるための関数です。
Excel関数でいう「SUBSTITUTE」と似ていますが、VBAではより柔軟に扱えます。

・基本構文

Replace(文字列, 検索文字列, 置換後文字列, [開始位置], [置換回数], [比較方法])

・各引数の説明

引数名内容省略時
文字列処理対象となる文字列必須
検索文字列探したい文字列必須
置換後文字列置き換える文字列必須
開始位置検索を始める位置1
置換回数何回置き換えるか全件
比較方法大文字小文字を区別するかvbBinaryCompare

・基本的な例

Sub ReplaceBasic()
    Dim str As String
    str = "VBAは便利なvbaツールです"
    str = Replace(str, "vba", "Excel VBA", , , vbTextCompare)
    MsgBox str
End Sub

実行結果:
「Excel VBAは便利なExcel VBAツールです」

vbTextCompareを使うと大文字・小文字を区別せずに置き換えが可能です。


✅ セルの中の文字を一括で置換する

Replaceメソッドは変数だけでなく、セルの中の値にも使えます。
たとえば、A列全体にある文字列を一括で修正したい場合は以下のように書きます。

・範囲指定で置換する例

Sub ReplaceInRange()
    Dim c As Range
    For Each c In Range("A1:A100")
        If c.Value <> "" Then
            c.Value = Replace(c.Value, "株式会社", "(株)")
        End If
    Next c
End Sub

このマクロではA1~A100を順番に処理し、
セル内にある「株式会社」をすべて「(株)」に置き換えます。

空白セルはスキップしているため、安全に実行できます。


✅ シート全体の文字列を一括置換する方法

大量データを扱う場合、1セルずつ処理するのは遅くなります。
その場合はCells.Replaceメソッドを使用すると、シート全体を瞬時に置換できます。

・シート全体を対象に置換するVBA

Sub ReplaceAllSheet()
    With ActiveSheet
        .Cells.Replace What:="株式会社", Replacement:="(株)", LookAt:=xlPart
    End With
End Sub

・主な引数の意味

引数説明
What検索する文字列
Replacement置き換える文字列
LookAt検索条件(部分一致 or 完全一致)
  • LookAt:=xlPart → 「株式会社A」も対象
  • LookAt:=xlWhole → 完全一致のみ置換

✅ 複数条件の文字列を一括置換する方法

実務では、1種類だけでなく複数の置換条件が必要になることもあります。
このような場合は、Dictionary(連想配列)を使って効率的に一括処理します。

・複数パターンをまとめて置換するVBA

Sub ReplaceMultiple()
    Dim dict As Object
    Dim key As Variant
    Dim txt As String
    
    Set dict = CreateObject("Scripting.Dictionary")
    dict.Add "株式会社", "(株)"
    dict.Add "有限会社", "(有)"
    dict.Add "会社", "Co., Ltd."
    
    txt = Range("A1").Value
    
    For Each key In dict.keys
        txt = Replace(txt, key, dict(key))
    Next key
    
    Range("B1").Value = txt
End Sub

この方法なら、「株式会社」「有限会社」「会社」などを一度に処理可能です。
管理表から条件を読み込めば、非エンジニアでも簡単に編集できます。


✅ 列ごと・シート全体の文字をまとめて置換する応用例

シート全体ではなく「特定列」だけを置換したい場合もあります。
次の例では、B列のみを対象に複数置換を行います。

Sub ReplaceByColumn()
    Dim r As Range
    Dim dict As Object
    Dim k As Variant
    
    Set dict = CreateObject("Scripting.Dictionary")
    dict.Add "東京", "Tokyo"
    dict.Add "大阪", "Osaka"
    dict.Add "名古屋", "Nagoya"
    
    For Each r In Range("B2:B100")
        For Each k In dict.keys
            r.Value = Replace(r.Value, k, dict(k))
        Next k
    Next r
End Sub

このように、置換対象の範囲を柔軟に指定できるのがVBAの強みです。
商品名・地域名など部分的な修正に特に向いています。


✅ 大文字・小文字を無視して置換する

データによっては、「VBA」「vba」「Vba」など表記が混在していることもあります。
その場合は第6引数(比較方式)をvbTextCompareに設定すれば解決します。

・大文字小文字を区別せず置換する例

Sub ReplaceIgnoreCase()
    Dim s As String
    s = "VBAとvbaは同じ意味です"
    MsgBox Replace(s, "vba", "Excel VBA", , , vbTextCompare)
End Sub

結果:「Excel VBAとExcel VBAは同じ意味です」


✅ ワイルドカードと正規表現の使い分け

Replaceメソッドでは「*」「?」などのワイルドカードは直接使えません。
そのため、複雑なパターン置換をしたい場合は正規表現(RegExp)を活用します。

・正規表現を使った例(数字を削除)

Sub ReplaceRegex()
    Dim reg As Object, result As String
    Set reg = CreateObject("VBScript.RegExp")
    With reg
        .Pattern = "[0-9]+"
        .Global = True
    End With
    result = reg.Replace("商品A123と商品B456", "")
    MsgBox result
End Sub

結果:「商品Aと商品B」


✅ 特定条件で置換をスキップする

Replaceを使うときに、「空白セルやエラー値は対象外にしたい」といったケースもあります。
その場合は、If文で条件分岐させると安全です。

Sub ReplaceSkipEmpty()
    Dim c As Range
    For Each c In Range("A1:A50")
        If Not IsError(c.Value) And c.Value <> "" Then
            c.Value = Replace(c.Value, "不要", "")
        End If
    Next c
End Sub

このように、セルが空白またはエラー値の場合は処理をスキップできます。
データ破損を防ぐ安全設計の基本です。


✅ データ整形でよく使うReplace活用パターン

Replaceメソッドは単なる置換だけでなく、データクレンジング(整形)にも最適です。
特に業務でよく使われる置換処理をいくつか紹介します。

目的Replaceの例
改行削除Replace(c.Value, vbCrLf, "")
半角スペース削除Replace(c.Value, " ", "")
全角スペース削除Replace(c.Value, " ", "")
記号削除Replace(c.Value, "-", "")
連続スペース削除Replace(c.Value, " ", " ")(複数回適用)

これらを組み合わせれば、データ入力の揺れやノイズを一括で整理できます。




✅ Replaceの高速化テクニック

大量のデータを処理するときは、以下の設定で処理速度を大幅に向上させられます。

  1. 画面更新を止める
    Application.ScreenUpdating = False
    参考:【VBA】Application.ScreenUpdatingプロパティの使用方法と特徴
  2. 配列に読み込んで処理する
    Dim arr As Variant
    arr = Range("A1:A1000").Value
    
  3. 配列内でReplace実行
    For i = 1 To UBound(arr)
        arr(i, 1) = Replace(arr(i, 1), "旧", "新")
    Next i
    
  4. 結果を一括で書き戻す
    Range("A1").Resize(UBound(arr)).Value = arr
    Application.ScreenUpdating = True
    

この方法で数万件の置換でも数秒で完了します。

参考:【VBA】シート全体のスペースを削除する方法:Trim 関数・Replace 関数


✅ 実務応用:マスタ表を基に置換する

手動で条件を追加する代わりに、シート上のマスタ表を読み取って自動置換することもできます。

・マスタを基に一括置換する例

Sub ReplaceFromMaster()
    Dim wsData As Worksheet, wsMap As Worksheet
    Dim i As Long, lastRow As Long
    Dim findStr As String, repStr As String
    
    Set wsData = Worksheets("データ")
    Set wsMap = Worksheets("マスタ")
    lastRow = wsMap.Cells(wsMap.Rows.Count, "A").End(xlUp).Row
    
    For i = 2 To lastRow
        findStr = wsMap.Cells(i, 1).Value
        repStr = wsMap.Cells(i, 2).Value
        wsData.Cells.Replace What:=findStr, Replacement:=repStr, LookAt:=xlPart
    Next i
    
    MsgBox "置換が完了しました。"
End Sub

マスタ表(A列:検索文字、B列:置換後文字)を作るだけで、
誰でも簡単に置換条件を管理できます。
実務で非常に多く使われる手法です。


✅ まとめ:Replaceメソッドで文字列の一括置換を完全自動化しよう

  • ReplaceメソッドはVBAで文字列を自動置換する標準機能
  • Cells.Replaceでシート全体の一括処理が可能
  • Dictionaryで複数条件の一括置換もスムーズ
  • vbTextCompareを使えば大文字・小文字を区別せず処理できる
  • 正規表現でより柔軟な置換も実現
  • 配列化と画面更新停止で高速化できる
  • マスタ表連携で業務自動化の定番に

Replaceメソッドは単なる便利関数ではなく、データ整形・名寄せ・報告書作成など、
あらゆる業務の基盤となる文字処理の中心ツールです。

一度使い方をマスターすれば、「人が手で直していた作業」をVBAがすべて自動でやってくれるようになります。
今日から、あなたのExcel作業も「置換を自動化」して、業務効率を一段上げていきましょう。

    -VBAで自動化, VBA一覧, セル・値の取得と貼り付け, 置き換え