[VBA] 文字列を検索して別の文字列に置き換えます

 今回は 指定した文字列を検索して別の文字列に置き換えてしまう 方法を解説します。それには Replace 関数 を使うのですけど、この関数は使い方に気をつけないと大変なことになってしまいます。

文字列を検索して別の文字列に置き換えます

 Replace 関数は次のような形で引数を指定することになっています。

=Replace(文字列,検索文字列, 置換文字列 [,開始位置 [,置換数 [,比較モード]]])

 [ ] の中は省略できる引数ですが、これを全部省略すると指定した [文字列] の中にある [検索文字列] を全て [置換文字列] に変えます。例を見てみましょう。

'[VBA] Replace関数でAをBに置き換えるマクロ

Sub Change_AB()

  Dim mystr1 As String
  Dim mystr2 As String

  mystr1 = "AAAAA"
  mystr2 = Replace(mystr1, "A", "B")

  Debug.Print mystr2

End Sub

 Change_AB() を実行すると「AAAAA」という文字列が全て「BBBBB」に変わります。少し細かいことを言うと、文字列の先頭から A という文字を検索して、順に B という文字列に置き換えているのです。今度は開始位置も指定するマクロを書いてみます。

'[VBA] 3文字目からXをYに置き換えるマクロ

Sub Change_XY_1()

  Dim mystr1 As String
  Dim mystr2 As String

  mystr1 = "XXXXX"
  mystr2 = Replace(mystr1, "X", "Y", 3)

  Debug.Print mystr2

End Sub

 コードを見ると、なんとなく「XXXXX」を「XXYYY」に変えるような気がするでしょ? 常識的に考えるとそうですよね。でも違うのです。Change_XY_1 を実行すると先頭の 2 文字は消えてしまって「YYY」という文字列が表示されます。こばとも最初にこの関数を使ったときは勘違いしちゃって、「ひゃああ! 勝手に文字を消さないでくださいな!」と一羽で大騒ぎしましたよ。だからこの Replace 関数の機能を正確に表現すると「指定した文字列を指定の位置から検索して別の文字列に置き換えて、指定位置以降の文字列を取り出す」関数です。ややこしい表現だから無理に覚えることないけどね。次は4つめの引数である [置換数] も指定してみましょう。

'[VBA] 3文字目から2文字のXをYに置き換えるマクロ

Sub Change_XY_2()

  Dim mystr1 As String
  Dim mystr2 As String

  mystr1 = "XXXXX"
  mystr2 = Replace(mystr1, "X", "Y", 2, 3)

  Debug.Print mystr2

End Sub

 Change_XY_2() を実行すると、やっぱり先頭の文字は消えてしまって「YYYX」と表示されます。あと、5つめの引数の [比較モード] はややこしくて滅多に使わないし、別の記事で解説するので、あまり気にしないでくださいな。
 

Replace 関数でスペースを消します

 Replace 関数を使って文字列内の全てのスペースを消すことができますよ。" " を "" に置き換えればいいのです。

'[VBA] スペースを消すマクロ

Sub Delete_String_Space()

  Dim mystr1 As String
  Dim mystr2 As String

  mystr1 = "A BC D E"
  mystr2 = Replace(mystr1, " ", "")

  Debug.Print mystr2

End Sub

 Delete_String_Space を実行すると「A BC D E」という文字列の中にあるスペースを全部消して「ABCDE」と表示します。


 

コメント

  1. 匿名 より:

    Replace関数の開始位置、僕もハマりました…
    開始位置と言えば、ただ「検索を開始する位置」と思いますよねぇ(汗)
    まさか開始位置以前が削除されるなんて夢にも思いませんでした(笑)

    • こばと より:

       Replace は本当にややこしい関数ですよね。
       でも、こういう失敗も後から思い返すと笑い話になります。
       これからも、お互い楽しみながらプログラミングのスキルを上達させましょう(^-^)/。

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)