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

【VBA】Replaceメソッドで文字を一括置き換え!特定の文字列を変換する方法とサンプルコード

Excel VBAを使ってデータを整理していると、「セル内の文字をまとめて置き換えたい」「文字列の一部だけを別の言葉に変えたい」といった場面が頻繁にあります。
たとえば「株式会社」を「(株)」に統一したい、不要な記号を削除したい、英字を全角から半角に変えたい──といった処理です。

これを手作業で「検索と置換」機能を使うのは時間がかかりますが、VBAの「Replaceメソッド」を使えば、一瞬で自動的に置き換えることができます。

本記事では、Replaceメソッドの基本構文から応用例、ワイルドカード・正規表現との違い、実務での使い方まで、すべてを体系的に解説します。
これを読めば、文字置換処理の自動化がスムーズに行えるようになります。

✅ Replaceメソッドとは?基本構文と使い方

まず、Replaceメソッドの基本を押さえましょう。
VBAのReplaceメソッドは、文字列中の特定の文字列を別の文字列に置き換えるための組み込み関数です。

・基本構文

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

・主な引数の意味

引数名内容省略時の値
対象文字列処理対象となる文字列必須
検索文字列探す文字列必須
置換後文字列置き換える文字列必須
開始位置検索を始める位置(1が先頭)1
置換回数置き換える回数。省略するとすべて置き換える全件
比較方式大文字小文字の区別(vbBinaryCompare / vbTextCompare)vbBinaryCompare

・基本的な使い方の例

Sub SampleReplace()
    Dim strText As String
    strText = "VBAは便利なvbaツールです"
    
    '大文字小文字を区別せずに置き換える
    strText = Replace(strText, "vba", "Excel VBA", , , vbTextCompare)
    
    MsgBox strText
End Sub

▶ 実行結果

「VBAは便利なExcel VBAツールです」

このように、Replaceメソッドを使えば1行で置換が完了します。
関数形式で使えるため、変数内の文字列やセルの値に簡単に適用できます。


✅ セルの値をReplaceで置き換える

実務では、文字列変数だけでなく「セルの中の値」を直接置き換えたいケースが多いでしょう。
たとえば、全シートの中で「旧社名」を「新社名」に変えたい場合です。

・セル単位で置換する例

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

このコードでは、A1〜A10の範囲を順に処理し、文字列「株式会社」を「(株)」に置き換えています。
空白セルはスキップしているため、安全に全データを処理できます。

参考:【VBA】スペースを一括で削除【Replace関数:Trim関数】


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

個別のセルを回す方法は安全ですが、データが数千行ある場合は少し遅く感じることもあります。
そんなときは、Cells.Replaceメソッドを使うと、シート全体を一気に置換できます。

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

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

・補足

  • What::検索する文字列

  • Replacement::置き換え後の文字列

  • LookAt:=xlPart は部分一致で置換
    "株式会社A" のような文字列も対象になります。

LookAt:=xlWholeに変更すると、完全一致でのみ置換されます。


✅ 複数の文字を一度に置き換える方法

Replaceメソッドは1対1の置き換えが基本ですが、
業務では「複数の文字をまとめて置き換えたい」ことも多いはずです。
この場合、Dictionaryや配列を使うと効率的に一括処理できます。

・複数条件を一括で置き換える例

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

この方法なら、複数パターンの置換を自動処理できます。
辞書を外部CSVやシートで管理すれば、非エンジニアでも条件変更が簡単です。

参考:【VBA】文字列の置換を一括で行う方法:Replace関数


✅ 大文字・小文字を区別せず置き換える設定

Replaceメソッドの比較方式(第6引数)には、以下の2種類があります。

定数名意味
vbBinaryCompare大文字小文字を区別する
vbTextCompare大文字小文字を区別しない

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

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

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

vbTextCompareを指定することで、大文字・小文字に関係なく置換されます。


✅ ワイルドカードではなく正規表現で高度な置換を行う

Replaceメソッド自体はワイルドカードに対応していません。
*? のようなパターン検索を行うには、正規表現(RegExpオブジェクト)を使用します。

・正規表現で複数パターンを置換する例

Sub ReplaceByRegex()
    Dim reg As Object
    Dim result As String
    Set reg = CreateObject("VBScript.RegExp")
    
    With reg
        .Pattern = "[0-9]+"  '数字を検出
        .Global = True
    End With
    
    result = reg.Replace("ID:12345です。5678も対象。", "●")
    MsgBox result
End Sub

▶ 実行結果

「ID:●です。●も対象。」

このように、正規表現を使えば「数字だけ」「特定の文字パターン」など、
Replaceメソッドでは難しい条件でも柔軟に置換できます。


✅ ReplaceとWorksheetFunction.Substituteの違い

Excel関数「SUBSTITUTE」に相当する処理を行う方法として、
VBAではReplaceのほかに「WorksheetFunction.Substitute」も利用できます。

比較項目ReplaceメソッドWorksheetFunction.Substitute
対象文字列全体セル内の文字列
置換回数指定可能(第5引数)指定可能(第4引数)
正規表現対応なしなし
大文字小文字区別設定可能常に区別あり
パフォーマンス高速やや遅い

実務上は、Replaceメソッドの方が高速・柔軟でおすすめです。


✅ 実務応用例:シート全体の特定記号を削除するマクロ

Replaceメソッドは、置換だけでなく「削除」にも応用できます。
たとえばデータの前処理で、不要な改行やスペースを除去するケースです。

・不要な記号・改行を削除する例

Sub CleanUpSheet()
    Dim c As Range
    For Each c In Range("A1:A1000")
        If c.Value <> "" Then
            c.Value = Replace(c.Value, vbCrLf, "")  '改行削除
            c.Value = Replace(c.Value, " ", "")    '全角スペース削除
            c.Value = Replace(c.Value, " ", "")     '半角スペース削除
        End If
    Next c
End Sub

このようにReplaceを組み合わせることで、データクレンジング(整形)処理を簡単に自動化できます。


✅ 処理速度を上げるコツ

大量データを扱う場合、Replaceを1セルずつ処理すると時間がかかることがあります。
次の工夫で高速化が可能です。

  1. ScreenUpdatingを停止する

    Application.ScreenUpdating = False
    
  2. 配列に読み込んで一括処理

    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
    

これで速度は10倍以上改善することもあります。


✅ まとめ:Replaceメソッドで文字置換を自在に操ろう

最後に、本記事の要点を整理します。

  • Replaceメソッドは文字列中の特定部分を置き換える標準関数

  • 基本文法:Replace(対象文字列, 検索文字列, 置換後文字列)

  • vbTextCompareで大文字小文字を無視できる

  • Cells.Replaceを使えばシート全体を一括処理できる

  • 複数置換はDictionaryを使うとスマート

  • 正規表現(RegExp)でワイルドカード的置換も可能

  • データ整形や不要文字削除にも応用可能


Replaceメソッドを使いこなせば、文字列操作が驚くほどスムーズになります。
単なる置換だけでなく、「入力データのクレンジング」「ファイル出力前の整形」「帳票内の表記統一」など、実務のほぼすべてで役立つテクニックです。

VBAを使った自動化の第一歩として、ぜひこのReplaceメソッドをマスターしてみてください。

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