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回だけ」なども書ける
