Excelを使っていると、「特定の文字列を一括で置き換えたい」という場面がよくあります。たとえば、商品名の変更、顧客名の修正、日付のフォーマット調整など、手作業で1つずつ直すのは非常に面倒です。
そんな時に便利なのが、VBA(Visual Basic for Applications)による置換処理です。VBAを使えば、何千行ものデータでも一瞬で置き換えが可能になります。
本記事では、VBAを使った置換の基本的な使い方から、複雑な条件での置換方法、注意点や活用例まで、初心者にもわかりやすく丁寧に解説していきます。
VBAで置換を行う最も基本的な方法は、「Replace
関数」と「Range.Replace
メソッド」の2つがあります。
Sub ReplaceExample()
Dim text As String
text = "私は猫が好きです。猫はかわいい。"
text = Replace(text, "猫", "犬")
MsgBox text
End Sub
このコードでは、「猫」という文字をすべて「犬」に置き換えています。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で置換処理をする際には、以下のような点に注意しましょう。
LookAt:=xlWhole
と LookAt:=xlPart
の違いで結果が変わる。Replacement:=""
とすると、指定の語句が削除される。以下のような業務でVBAの置換処理は大いに役立ちます。
VBAによる置換処理は、非常にパワフルかつ便利な機能です。
手作業では煩雑で時間のかかる文字列の変更も、一瞬で正確に完了できます。基本のReplace
関数から、Range.Replace
メソッド、さらには条件付きや複数語句の一括置換まで、活用の幅は広がります。
これを機に、日々の作業にVBAを取り入れ、業務の効率化を図ってみてはいかがでしょうか?