Excel VBAを使ってデータを自動で編集する際、「文字列を置換したい」と思うことは多いでしょう。VBAには、文字列の内容を自動で書き換える便利な関数やメソッドが用意されています。この記事では、VBA Replace関数とReplaceメソッドで文字列を置換する方法をわかりやすく解説します。複数条件の置換や正規表現を使った応用テクニックも紹介するので、データ処理を効率化したい方は必見です。
VBAで文字列を置換するには?Replaceの基本を理解しよう
VBAで文字列を置換する方法は主に2つあります。
- Replace関数:文字列変数内の一部を置き換える
- Range.Replaceメソッド:セル範囲内の文字列を置き換える
| 方法 | 対象 | 主な用途 |
|---|---|---|
| Replace関数 | 文字列変数 | コード内のテキスト処理 |
| Range.Replace | セル範囲 | Excelシート上のデータ処理 |
単純な文字列処理から、シート全体の一括置換まで、これらを使い分けることで自動化が簡単になります。
Replace関数の基本構文と使い方
Replace関数の構文と使用方法については、VBAのReplace関数・Replaceメソッドの違いと使い方を徹底解説でも詳細に解説されています。
Replace(expression, find, replace[, start[, count[, compare]]])
| 引数 | 意味 |
|---|---|
| expression | 対象文字列 |
| find | 検索する文字列 |
| replace | 置換する文字列 |
| start | 置換を開始する位置(省略可) |
| count | 置換する回数(省略可) |
| compare | 大文字小文字の区別設定(vbBinaryCompare/vbTextCompare) |
使用例
Sub ReplaceExample()
Dim text As String
text = "apple banana"
text = Replace(text, "apple", "orange")
MsgBox text '→ "orange banana"
End Sub
大文字小文字を区別しない置換
text = Replace(text, "APPLE", "orange", , , vbTextCompare)
Replace関数の応用例:改行や部分置換にも対応
改行コードの置換:
text = Replace(text, vbCrLf, " ")
改行をスペースに変換してテキストを1行にまとめることができます。
特定範囲のみ置換:
text = Replace(text, "a", "A", 5) '5文字目以降を置換
正規表現を使って柔軟に置換する方法
正規表現を使えば、パターンに一致する文字列を一括で置換できます。数字の削除や特定形式の変換など、より高度な処理が可能です。
Sub RegExpReplace()
Dim regEx As Object
Set regEx = CreateObject("VBScript.RegExp")
regEx.Pattern = "[0-9]" '数字を対象
regEx.Global = True
Dim text As String
text = "abc123def"
text = regEx.Replace(text, "")
MsgBox text '→ "abcdef"
End Sub
ポイント:
- .Patternで検索ルールを設定
- .Global = Trueで全文置換を指定
- .Replace(文字列, 置換後文字列)で置換実行
複数の文字列をまとめて置換する方法
複数のキーワードを順番に置換したい場合は、配列(Array)を使うと便利です。
Sub MultiReplace()
Dim text As String
Dim findList, repList
Dim i As Integer
text = "Tokyo Osaka Nagoya"
findList = Array("Tokyo", "Osaka", "Nagoya")
repList = Array("東京", "大阪", "名古屋")
For i = 0 To UBound(findList)
text = Replace(text, findList(i), repList(i))
Next i
MsgBox text '→ "東京 大阪 名古屋"
End Sub
この方法を応用すると、辞書(Dictionary)を使って柔軟に複数条件を置換することも可能です。
Range.Replaceメソッドでセル内の文字列を置換する
Excelシート上のデータを置換したい場合は、Range.Replaceメソッドを使います。
Range.Replace What, Replacement, LookAt, MatchCase
| 引数 | 意味 |
|---|---|
| What | 検索する文字列 |
| Replacement | 置換文字列 |
| LookAt | 一致モード(xlWhole/xlPart) |
| MatchCase | 大文字小文字の区別 |
使用例
Sub RangeReplaceExample()
Range("A1:A10").Replace What:="東京", Replacement:="TOKYO", LookAt:=xlPart
End Sub
Range.Replaceの応用・ワイルドカード・複数条件で置換する
ワイルドカードを使った部分一致置換:
Range("A1:A10").Replace What:="*株式会社*", Replacement:="(株)"
- *:任意の文字列
- ?:任意の1文字
複数条件で一括置換:
Sub MultiRangeReplace()
Dim ws As Worksheet
Dim words, reps
Dim i As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
words = Array("旧社名", "株式会社", "有限会社")
reps = Array("新社名", "(株)", "(有)")
For i = 0 To UBound(words)
ws.Cells.Replace What:=words(i), Replacement:=reps(i), LookAt:=xlPart
Next i
End Sub
このように、Range.Replaceを使えばシート全体の文字列置換を一括で処理できます。より高度な実務向けサンプルは、VBA Replace関数|文字列を効率よく置換する方法でも紹介されています。
Replace関数とRange.Replaceメソッドの使い分けポイント
| 方法 | 適した用途 |
|---|---|
| Replace関数 | 文字列変数の中身を置換したいとき |
| Range.Replace | Excelのセル範囲内を一括置換したいとき |
| RegExp | パターンに基づく柔軟な置換を行いたいとき |
両方を組み合わせることで、VBAの置換処理をより強力に自動化できます。
まとめ|Replaceを使いこなして置換処理を自動化しよう
- VBA Replace関数は文字列操作に最適
- Range.Replaceでセル範囲を一括置換できる
- 正規表現・RegExpを使えば複雑な条件にも対応可能
これらを理解すれば、VBAでの文字列置換やデータ整形が劇的に効率化します。基本構文と引数の意味を押さえて、ぜひ実務や自動化マクロに活用してみてください。


