Excelでデータを扱っていると、「同じ置換作業を何度も繰り返している」と感じたことはありませんか?
たとえば、
- 商品名に含まれる特定の文字列をまとめて修正したい
- 社名表記を「株式会社」から「(株)」に一括で統一したい
- 余計なスペースや記号をすべて削除したい
こうした作業を手作業で行うのは非効率です。
しかし、VBAのReplaceメソッドを使えば、文字列の一括置換を一瞬で自動化できます。
この記事では、Replaceメソッドの基本構文から、シート全体・複数条件・列単位・正規表現など、実務に役立つ応用までを徹底解説します。
目次
- ✅ Replaceメソッドで文字列を置換する基本構文
- ・Replaceメソッドとは?
- ・基本構文
- ・各引数の説明
- ・基本的な例
- ✅ セルの中の文字を一括で置換する
- ・範囲指定で置換する例
- ✅ シート全体の文字列を一括置換する方法
- ・シート全体を対象に置換するVBA
- ・主な引数の意味
- ✅ 複数条件の文字列を一括置換する方法
- ・複数パターンをまとめて置換するVBA
- ✅ 列ごと・シート全体の文字をまとめて置換する応用例
- ✅ 大文字・小文字を無視して置換する
- ・大文字小文字を区別せず置換する例
- ✅ ワイルドカードと正規表現の使い分け
- ・正規表現を使った例(数字を削除)
- ✅ 特定条件で置換をスキップする
- ✅ データ整形でよく使うReplace活用パターン
- ✅ 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の高速化テクニック
大量のデータを処理するときは、以下の設定で処理速度を大幅に向上させられます。
- 画面更新を止める
Application.ScreenUpdating = False参考:【VBA】Application.ScreenUpdatingプロパティの使用方法と特徴 - 配列に読み込んで処理する
Dim arr As Variant 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
この方法で数万件の置換でも数秒で完了します。
参考:【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作業も「置換を自動化」して、業務効率を一段上げていきましょう。