Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 - Replace

Excel VBA VBA
スポンサーリンク

Replace は「文字列の一部を別の文字に“総入れ替え”する道具」

Replace 関数は、
「文字列の中にある“ある部分”を、別の文字列に置き換える」ための関数です。

人間の感覚で言うと、

「この文章の『A』って書いてあるところ、全部『B』に書き換えて」

と頼むイメージです。

スペースを消したり、年号を一括で変えたり、記号を別の記号に変えたり――
「探して、見つけたところを全部(または一部)置き換える」処理で大活躍します。


Replace の基本構文と一番シンプルな使い方

基本構文

まずは一番よく使う形から。

Replace(元の文字列, 探す文字列, 置き換える文字列)
VB

この3つだけで、かなりのことができます。

  • 元の文字列:どの文字列を対象にするか
  • 探す文字列:どの部分を探すか
  • 置き換える文字列:何に置き換えるか

年号を一括で置き換える例

Sub SampleReplaceBasic()

    Dim s As String
    Dim t As String

    s = "Excel2016 と Excel2016 VBA 入門"
    t = Replace(s, "2016", "2026")

    MsgBox t   ' → "Excel2026 と Excel2026 VBA 入門"

End Sub
VB

ここで起きていることを言葉にすると、

「文字列 s の中にある『2016』という部分を、
 見つかったところ全部『2026』に置き換えた結果を t に入れる」

という動きです。

重要なのは、
「Replace は“元の文字列を直接書き換える”のではなく、“置き換えた結果を返す”関数」
だということです。

なので、上の例のように、

t = Replace(s, "2016", "2026")
VB

のように「結果をどこかに受け取る」書き方をします。
元の s はそのまま残っています。


「消す」も Replace でできる(空文字に置き換える)

特定の文字を削除したいとき

「置き換える文字列」を空文字 "" にすると、
「その部分を削除する」という動きになります。

Sub SampleReplaceDelete()

    Dim s As String

    s = "A-001-XYZ"

    ' ハイフンを全部消す
    s = Replace(s, "-", "")

    MsgBox s   ' → "A001XYZ"

End Sub
VB

ここでは、

  • 「-」を
  • 「何もないもの(空文字)」に置き換える

=「- を全部消す」という意味になります。

「記号を取り除きたい」「スペースを消したい」など、
“削除”も Replace で表現できる、というのはかなりよく使うテクニックです。

全角スペースを消す・半角に統一する

Sub SampleReplaceSpace()

    Dim s As String

    s = "山田 太郎"   ' 間に全角スペース

    ' 全角スペースを消す
    s = Replace(s, " ", "")

    MsgBox s   ' → "山田太郎"

End Sub
VB

あるいは、「全角スペースを半角スペースに統一する」こともできます。

s = Replace(s, " ", " ")
VB

こうして「文字の揺れ」を揃えておくと、
比較や検索が安定して動くようになります。


Replace の“全部置き換え”という性質をちゃんと理解する

一致したところは全部対象になる

Replace は、基本的には「見つかったところ全部」が対象です。

Sub SampleReplaceAll()

    Dim s As String

    s = "AAA BBB AAA"

    s = Replace(s, "AAA", "XXX")

    MsgBox s   ' → "XXX BBB XXX"

End Sub
VB

最初の AAA だけでなく、後ろの AAA も両方とも XXX に変わります。

「1箇所だけ変えたい」場合は、
後で説明する「開始位置」や「回数」の指定を使いますが、
超初心者のうちは「基本は全部変わる」と覚えておけばOKです。


もう少し踏み込んだ Replace の構文(開始位置・回数・大文字小文字)

フル構文

Replace には、実は引数がもっとあります。

Replace(元の文字列, 探す文字列, 置き換える文字列, [開始位置], [回数], [比較方法])
VB

[] は省略可能な引数です。
よく使うのは「開始位置」と「回数」です。

開始位置:どこから検索を始めるか

「文字列の途中からだけ置き換えたい」場合に使います。

Sub SampleReplaceStart()

    Dim s As String

    s = "AAA BBB AAA"

    ' 5文字目以降だけを対象にする
    s = Replace(s, "AAA", "XXX", 5)

    MsgBox s   ' → "AAA BBB XXX"

End Sub
VB

文字を数えると、

  • 1: A
  • 2: A
  • 3: A
  • 4: スペース
  • 5: B

なので、「5文字目以降」には後ろの AAA しか含まれません。
その結果、後ろの AAA だけが XXX に変わります。

回数:何回まで置き換えるか

「最初の1回だけ置き換えたい」など、回数を制限したいときに使います。

Sub SampleReplaceCount()

    Dim s As String

    s = "AAA BBB AAA"

    ' 最初の1回だけ置き換える
    s = Replace(s, "AAA", "XXX", 1, 1)

    MsgBox s   ' → "XXX BBB AAA"

End Sub
VB

ここでは、

  • 1文字目から検索を始めて
  • 見つかった1回だけ置き換える

という指定になっています。

開始位置と回数を組み合わせると、

「5文字目以降で、最初の1回だけ」
のような細かい指定もできますが、
超初心者のうちは「全部置き換え」と「開始位置だけ」くらいを押さえておけば十分です。


Replace を使うときに意識してほしい重要ポイント

元の文字列は“勝手には変わらない”

Replace は「関数」なので、
元の文字列を勝手に書き換えたりはしません。

s = "ABC"
Replace(s, "A", "X")   ' これだけでは s は変わらない
VB

この書き方だと、結果をどこにも受け取っていないので、
s はずっと “ABC” のままです。

必ず、

s = Replace(s, "A", "X")
VB

のように、「結果を代入する」形にしてください。

ここを忘れると、「Replace 書いたのに何も変わってない…」というあるあるにハマります。

「何を」「何に」変えるかを、先に日本語で言えるようにする

Replace を書く前に、必ず自分にこう聞いてください。

「この文字列の中の、どの部分を、何に変えたいのか?」

例えば、

  • 「全角スペースを、半角スペースに変えたい」
  • 「ハイフンを全部消したい」
  • 「’2025′ を ‘2026’ に変えたい」

この日本語がはっきりしていれば、
そのまま Replace の3つの引数に落とし込めます。

s = Replace(s, " ", " ")
s = Replace(s, "-", "")
s = Replace(s, "2025", "2026")
VB

「日本語で言えることは、だいたいそのままコードにできる」
この感覚を大事にしてほしいです。


まとめ:Replace は「探して、見つけたところを一気に書き換える」ための関数

Replace の本質は、とてもシンプルです。

「元の文字列の中から“探す文字列”を見つけて、
 それを“置き換える文字列”に差し替えた結果を返す」

押さえておきたいポイントをコンパクトにまとめると、

  • Replace(元, 探す, 置き換え) で「見つかったところ全部」を置き換える
  • 置き換える文字列を “” にすると「削除」と同じ意味になる
  • 元の文字列は勝手には変わらないので、結果を代入するのを忘れない
  • 開始位置や回数を指定すれば、「途中から」「最初の1回だけ」なども書ける

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