Excel VBAを使ってデータを整理していると、「セル内の文字をまとめて置き換えたい」「文字列の一部だけを別の言葉に変えたい」といった場面が頻繁にあります。
たとえば「株式会社」を「(株)」に統一したい、不要な記号を削除したい、英字を全角から半角に変えたい──といった処理です。
これを手作業で「検索と置換」機能を使うのは時間がかかりますが、VBAの「Replaceメソッド」を使えば、一瞬で自動的に置き換えることができます。
本記事では、Replaceメソッドの基本構文から応用例、ワイルドカード・正規表現との違い、実務での使い方まで、すべてを体系的に解説します。
これを読めば、文字置換処理の自動化がスムーズに行えるようになります。
目次
- ✅ Replaceメソッドとは?基本構文と使い方
- ・基本構文
- ・主な引数の意味
- ・基本的な使い方の例
- ▶ 実行結果
- ✅ セルの値をReplaceで置き換える
- ・セル単位で置換する例
- ✅ シート全体の文字列を一括で置換する方法
- ・シート全体を対象に置換する例
- ・補足
- ✅ 複数の文字を一度に置き換える方法
- ・複数条件を一括で置き換える例
- ✅ 大文字・小文字を区別せず置き換える設定
- ・大文字小文字を無視して置換する例
- ✅ ワイルドカードではなく正規表現で高度な置換を行う
- ・正規表現で複数パターンを置換する例
- ▶ 実行結果
- ✅ ReplaceとWorksheetFunction.Substituteの違い
- ✅ 実務応用例:シート全体の特定記号を削除するマクロ
- ・不要な記号・改行を削除する例
- ✅ 処理速度を上げるコツ
- ✅ まとめ: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セルずつ処理すると時間がかかることがあります。
次の工夫で高速化が可能です。
ScreenUpdatingを停止する
Application.ScreenUpdating = False配列に読み込んで一括処理
arr = Range("A1:A1000").Value配列要素に対してReplace
For i = 1 To UBound(arr) arr(i, 1) = Replace(arr(i, 1), "旧社名", "新社名") Next i結果を一度に書き戻す
Range("A1").Resize(UBound(arr)).Value = arr Application.ScreenUpdating = True
これで速度は10倍以上改善することもあります。
✅ まとめ:Replaceメソッドで文字置換を自在に操ろう
最後に、本記事の要点を整理します。
Replaceメソッドは文字列中の特定部分を置き換える標準関数
基本文法:
Replace(対象文字列, 検索文字列, 置換後文字列)vbTextCompareで大文字小文字を無視できるCells.Replaceを使えばシート全体を一括処理できる複数置換はDictionaryを使うとスマート
正規表現(RegExp)でワイルドカード的置換も可能
データ整形や不要文字削除にも応用可能
Replaceメソッドを使いこなせば、文字列操作が驚くほどスムーズになります。
単なる置換だけでなく、「入力データのクレンジング」「ファイル出力前の整形」「帳票内の表記統一」など、実務のほぼすべてで役立つテクニックです。
VBAを使った自動化の第一歩として、ぜひこのReplaceメソッドをマスターしてみてください。