VBAで自動化 VBA一覧 セル・値の取得と貼り付け 置き換え

【VBA】文字列を複数置換する方法|初心者でも分かる実務コード付き解説

Excel VBAでマクロを作り始めると、
「この文字を別の文字に置き換えたい」
「表記ゆれをまとめて直したい」
といった 文字列の置換処理 に必ず出会います。

最初は Replace 関数を1回使うだけで済みますが、
実務では次のような状況がよく発生します。

  • 複数の文字列を一気に置換したい
  • 置換ルールが増えてきた
  • 同じ処理を何度も使い回したい

こうした場面で、
Replaceを力技で並べると、コードが一気に読みにくくなります。

この記事では、VBA初心者の方でも理解できるように、

  • 文字列を複数置換する基本的な考え方
  • 実務でそのまま使えるコード例
  • よくある失敗と注意点

を、コード付きで順番に解説していきます。

✅ VBAで「文字列を複数置換する」とは

※誤解されやすいポイント

「Replaceを何回も書けばOK」と思うと、後で修正が大変になります。

・単一置換と複数置換の違い

VBAの Replace 関数は、
1回の処理で1つの文字列しか置換できません。

そのため、

  • 「A」を「B」に
  • 「C」を「D」に
  • 「E」を「F」に

といった複数のルールを適用したい場合、
何らかの工夫が必要になります。


・初心者が最初につまずくポイント

よくあるのが、次のような状態です。

  • Replaceが何十行も並んでいる
  • どこで何を置換しているか分からない
  • 1か所修正したら別の処理が壊れた

これを防ぐために、
置換ルールと処理ロジックを分けて考えることが重要です。


✅ Replace関数を使った一番シンプルな複数置換

※ここを読まないと後で困る理由

まずは「基本形」を知らないと、応用が理解できません。

・Replaceを順番に使う基本例

最も分かりやすい方法は、
Replaceを順番に適用するやり方です。

Sub ReplaceMultiple_Basic()

    Dim textValue As String
    textValue = "東京ー大阪_名古屋"

    ' 複数の文字を順番に置換
    textValue = Replace(textValue, "ー", "-")
    textValue = Replace(textValue, "_", "・")

    MsgBox textValue

End Sub

・この方法のメリットと限界

メリット

  • コードが直感的で分かりやすい
  • 初心者でも理解しやすい

デメリット

  • 置換ルールが増えると読みにくい
  • 修正漏れが起きやすい
  • 実務では管理が大変

👉 小規模ならOKですが、
実務では次の方法がよく使われます。


✅ 配列を使って複数置換する【初心者向け・定番】

※実務で一番よく使われる方法

初心者にもおすすめで、後から修正しやすいです。

・考え方を先に理解する

ポイントはとてもシンプルです。

  1. 置換前の文字列を配列にまとめる
  2. 置換後の文字列を配列にまとめる
  3. ループで順番にReplaceする

これだけです。


・配列を使った実務コード例

Sub ReplaceMultiple_Array()

    Dim textValue As String
    textValue = "東京ー大阪_名古屋"

    Dim beforeWords As Variant
    Dim afterWords As Variant
    Dim i As Long

    ' 置換前・置換後を配列で管理
    beforeWords = Array("ー", "_")
    afterWords = Array("-", "・")

    ' 配列をループして置換
    For i = LBound(beforeWords) To UBound(beforeWords)
        textValue = Replace(textValue, beforeWords(i), afterWords(i))
    Next i

    MsgBox textValue

End Sub

・この方法が初心者に向いている理由

  • 置換ルールが一目で分かる
  • 追加・修正が簡単
  • コードの流れが追いやすい

実務では
まずこの形を覚えておけばOK です。




✅ セル範囲に対して複数置換する方法

※ここを読まないと実務で使えない

文字列だけでなく、Excelのセルが対象になることが多いです。

・基本的な流れ

  1. セルの値を配列で取得
  2. VBAで複数置換
  3. 結果を一括で書き戻す

この方法は、
大量データでも高速に処理できます。


・実務で使えるコード例(A列対象)

Sub ReplaceMultiple_Cells()

    Dim targetRange As Range
    Set targetRange = Range("A1:A10")

    Dim data As Variant
    data = targetRange.Value

    Dim beforeWords As Variant
    Dim afterWords As Variant
    Dim i As Long, r As Long

    beforeWords = Array("株式会社", "(株)")
    afterWords = Array("", "")

    ' セル配列をループ
    For r = LBound(data, 1) To UBound(data, 1)
        For i = LBound(beforeWords) To UBound(beforeWords)
            data(r, 1) = Replace(data(r, 1), beforeWords(i), afterWords(i))
        Next i
    Next r

    targetRange.Value = data

End Sub

・なぜ配列で処理するのか

  • セルを1つずつ触らない
  • 画面更新が少ない
  • 処理速度が速い

👉 実務ではこの形がほぼ標準です。

参考:【VBA】Excelシート全体の置換を自動化する方法|部分一致・完全一致まで徹底解説


✅ 置換順序に注意しないと起きる失敗

※初心者が一番ハマりやすいポイント

順番を間違えると、結果が変わります。

・よくある失敗例

  • 「AB」を「A」に置換
  • 「A」を「Z」に置換

この場合、
どちらを先に行うかで結果が変わります。


・初心者向けの対策

  • 置換ルールが重ならないようにする
  • 必ず「配列の順番」を意識する
  • 複雑なら処理を分ける

無理に1つにまとめないのも、
立派な実務判断です。

参考:【VBA】Replaceメソッドでワイルドカードを使う方法|正規表現で柔軟な一括置換を実現


✅ 複数置換を関数にする(初心者向け)

※ここを覚えると一気に実務レベル

同じ処理を何度も書かなくて済みます。

・関数化した例

Function ReplaceMultiple(textValue As String) As String

    Dim beforeWords As Variant
    Dim afterWords As Variant
    Dim i As Long

    beforeWords = Array("ー", "_")
    afterWords = Array("-", "・")

    For i = LBound(beforeWords) To UBound(beforeWords)
        textValue = Replace(textValue, beforeWords(i), afterWords(i))
    Next i

    ReplaceMultiple = textValue

End Function

呼び出し側は、

Sub SampleCall()

    Dim result As String
    result = ReplaceMultiple("東京ー大阪_名古屋")

    MsgBox result

End Sub

・初心者でも関数化するメリット

  • コードがスッキリする
  • 修正が1か所で済む
  • バグが減る

「少し難しそう」と感じても、
早めに慣れておくと後が楽です。


✅ よくある初心者の失敗まとめ

※ここを読まないと後悔しやすい

  • Replaceを直書きで並べすぎる
  • 置換ルールがコードの中に散らばる
  • 順序を考えずに置換している
  • セルを1つずつ処理して遅くなる

これらはすべて、
今回紹介した方法で防げます。

参考:【VBA】文字列を一括置換する方法|Replaceメソッドで効率的にデータを整理するテクニック


✅ まとめ:VBAで文字列を複数置換する基本

  • Replaceは1つずつしか置換できない
  • 複数置換は配列+ループが基本
  • セル処理は配列でまとめて行う
  • 置換順序には必ず注意する
  • 関数化すると実務で使いやすい

VBAでの複数置換は、
難しいテクニックではなく、考え方が重要です。

まずは配列を使った方法から試してみてください。
それだけで、
あなたのVBAコードは 格段に読みやすく、壊れにくく なります。

参考:【VBA】2次元配列を使用して一括で格納・格納データをループで処理する方法

    -VBAで自動化, VBA一覧, セル・値の取得と貼り付け, 置き換え