VBAで文字列を一括置換!初心者でもわかる基本から応用テクニックまで

Excelを使っていると、「特定の文字列を一括で置き換えたい」という場面がよくあります。たとえば、商品名の変更、顧客名の修正、日付のフォーマット調整など、手作業で1つずつ直すのは非常に面倒です。
そんな時に便利なのが、VBA(Visual Basic for Applications)による置換処理です。VBAを使えば、何千行ものデータでも一瞬で置き換えが可能になります。
本記事では、VBAを使った置換の基本的な使い方から、複雑な条件での置換方法、注意点や活用例まで、初心者にもわかりやすく丁寧に解説していきます。


VBAで置換を行う基本構文とは?

VBAで置換を行う最も基本的な方法は、「Replace関数」と「Range.Replaceメソッド」の2つがあります。

Replace関数の使い方(文字列変数に対して)

Sub ReplaceExample()
Dim text As String
text = "私は猫が好きです。猫はかわいい。"
text = Replace(text, "猫", "犬")
MsgBox text
End Sub

このコードでは、「猫」という文字をすべて「犬」に置き換えています。
Replace(対象文字列, 検索文字列, 置換文字列)というシンプルな構文で使えます。
主にセルではなく、変数の中の文字列を置換するのに使います。


Range.Replaceメソッドでセル範囲の文字を置換する方法

セルの中身を置換したい場合は、Range.Replaceを使います。

Sub ReplaceInCells()
Worksheets("Sheet1").Range("A1:A10").Replace What:="旧商品名", Replacement:="新商品名", LookAt:=xlPart
End Sub

このコードでは、Sheet1のA1~A10の範囲で「旧商品名」を「新商品名」に置き換えます。

主な引数の意味

  • What:置換したい文字列
  • Replacement:置換後の文字列
  • LookAt:検索方法(xlPart = 部分一致、xlWhole = 完全一致)

条件付き置換の実装例

条件によって置換するかどうかを決めたい場合は、If文と組み合わせます。

Sub ConditionalReplace()
Dim cell As Range
For Each cell In Worksheets("Sheet1").Range("A1:A100")
If InStr(cell.Value, "山田") > 0 Then
cell.Value = Replace(cell.Value, "山田", "佐藤")
End If
Next cell
End Sub

このコードでは、「山田」という文字が含まれているセルだけに対して「佐藤」へと置換を行います。


複数の語句を一括置換する方法(辞書型を使った応用)

一つ一つ手で書くのは面倒なとき、Dictionary型を使うと複数の置換を一括で処理できます。

Sub MultiReplace()
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")

dict.Add "A社", "X社"
dict.Add "B商品", "Y商品"
dict.Add "C地区", "Z地区"

Dim cell As Range
Dim key As Variant

For Each cell In Worksheets("Sheet1").Range("A1:A100")
For Each key In dict.Keys
cell.Value = Replace(cell.Value, key, dict(key))
Next key
Next cell
End Sub

このようにして、複数の語句をまとめて置換できます。データが多い場合や、更新が頻繁にある場合にはとても便利です。


特定のシート全体で置換を実行する

Sub ReplaceEntireSheet()
Worksheets("Sheet1").Cells.Replace What:="未定", Replacement:="確定", LookAt:=xlWhole
End Sub

Cells.Replaceを使うことで、シート全体を対象にすることも可能です。
この方法では、対象範囲を選ばず、すべてのセルに対して置換が行われます。


大文字小文字の区別をつけたいときは?

MatchCase:=Trueという引数を追加すれば、大文字小文字を区別して置換ができます。

Sub ReplaceWithCase()
Worksheets("Sheet1").Range("A1:A100").Replace What:="abc", Replacement:="XYZ", MatchCase:=True
End Sub

この場合、ABCなどの大文字は置換されません。正確なマッチングが必要な場合に便利です。


置換処理の注意点

VBAで置換処理をする際には、以下のような点に注意しましょう。

  • バックアップを取っておく:一括置換は元に戻すのが難しいため、必ずコピーを取るか、Undo可能な仕組みにしておく。
  • 完全一致と部分一致を意識するLookAt:=xlWholeLookAt:=xlPart の違いで結果が変わる。
  • 空文字で置き換えると削除になるReplacement:="" とすると、指定の語句が削除される。

実務での活用例

以下のような業務でVBAの置換処理は大いに役立ちます。

  • 顧客名の変更(例:企業合併による社名変更)
  • 日付表記の統一(例:2025/04/15 → 2025年4月15日)
  • 一括削除処理(例:データ中の不要な記号の削除)
  • 表記ゆれの修正(例:「東京」⇔「とうきょう」)

まとめ

VBAによる置換処理は、非常にパワフルかつ便利な機能です。
手作業では煩雑で時間のかかる文字列の変更も、一瞬で正確に完了できます。基本のReplace関数から、Range.Replaceメソッド、さらには条件付きや複数語句の一括置換まで、活用の幅は広がります。

これを機に、日々の作業にVBAを取り入れ、業務の効率化を図ってみてはいかがでしょうか?

タイトルとURLをコピーしました