\Excelショートカット集もらえる/
Excel VBA | Replace関数とReplaceメソッドの使い方と違いについて
Excel VBAのReplace関数とReplaceメソッドそれぞれの使い方と違いについて実例を用いて解説します。複数範囲の置換やワイルドカードを使用する方法についても解説します。
- Excelの置換機能をマクロで実現したい
- VBAで記述した改行コードやスペースを別の文字列に置き換えたい
- replace関数とreplaceメソッドの違いを理解したい
Replace関数とは
Replace関数は、特定の文字列を、別の文字列に置換するために使用される関数です。VBAのReplace関数の構文は以下の通りです。
Replace(対象文字列, 置換される文字列, 置換後の文字列[, 開始位置[, 置換回数[, 比較方法]]])
引数 | 引数の説明 |
---|---|
対象文字列 | 検索対象となる文字列です。 |
置換される文字列 | 別の文字列に置換したい文字列です。 |
置換後の文字列 | 置換後に入れ替える文字列です。 |
開始位置(省略可能) | 置換を開始する位置を指定します。省略時は1(先頭)から置換が始まります。 |
置換回数(省略可能) | 置換を行う最大回数を指定します。省略時はすべての一致箇所が置換されます。 |
比較方法(省略可能) | 文字列の比較方法を指定します。省略時は「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別して置換が行われます。 |
【基本】特定の文字列を別の文字列に置換する
例えば、次のようなマクロを実行して、B3セルに入力されている文字列”ユースフル株式会社”を”株式会社Youseful”に置換したい場合、以下のマクロを実行することで実現できます。
Sub Replace関数基本1()
Cells(2, 2) = Replace(Cells(2, 2), "ユースフル株式会社", "株式会社Youseful")
MsgBox "会社名を置換しました"
End Sub
【応用】改行コードやスペースを削除する
Replace関数は特定の文字列だけでなく、スペースなどの空欄や、改行を取り除くこともできます。例えば、次のようなマクロを実行して、B6セルの改行を取り除いてみましょう。
Sub Replace関数応用1()
Cells(6, 2) = Replace(Cells(6, 2), vbLf, "")
MsgBox "読みづらい改行がなくなりました!"
End Sub
改行はVBAでは「vbLf」という特殊文字列で表されます。この特殊文字列を置換対象として、空文字列「””」に置換することで改行を取り除くことができます。
Replaceメソッドとは
Replaceメソッドは、文字列内で特定の文字列を、別の文字列に置換するために使用されます。Replaceメソッドの使用法は以下の通りです
Replace (What, Replacement, LookAt, SearchOrder, MatchCase, MatchByte, SearchFormat, ReplaceFormat)
引数 | 引数の説明 |
---|---|
What | 置換前の文字列です。 |
Replacement | 置換後の文字列です。 |
LookAt(省略可能) | 検索範囲を指定します。 |
SearchOrder(省略可能) | 検索する方向を指定します。 |
MatchCase(省略可能) | 大文字と小文字を区別するときに、**True** を指定します。 |
MatchByte(省略可能) | この引数は、Microsoft Excel で 2 バイト言語サポートを選択またはインストールした場合にのみ使用します。 2 バイト文字が 2 バイト文字とだけ一致するようにする場合は、True を指定します。 2 バイト文字が同等の 1 バイト文字とも一致するようにする場合は、False を指定します。 |
SearchFormat(省略可能) | メソッドの検索書式を指定します。 |
ReplaceFormat(省略可能) | メソッドの置換書式を指定します。 |
replaceメソッドの基本的な使い方
例えば、次のような表において、”第三営業部”を”第二営業部”に置換したい場合を考えてみましょう。
この場合、replaceメソッドを用いた以下のようなマクロで実現することができます。
Sub Replaceメソッド1()
Range("C5:C14").Replace What:="第三営業部", Replacement:="第二営業部"
MsgBox "置換が完了しました"
End Sub
ただし、1点だけ注意が必要です。Replaceメソッドを含む「〇〇メソッド」をVBAで使用する場合、引数を直接入力せず、「What:=”第三営業部”」のように、引数の名前の後ろに「:=」をつけて入力するようにしてください。理由を説明すると長くなってしまうので今回は割愛しますが、「お作法」として覚えておくのがよいでしょう。
Replace関数とReplaceメソッドの違い
これまで説明してきたように、Replace関数とReplaceメソッドはできることがとても似ています。しかし、同じことを実行したい場合でも、Replace関数とReplaceメソッドではコードの記述方法が大きく異なります。また、場合によってはどちらかの方法でしか実現できない場合もあります。
複数のセルに対して置換する場合
例えば、先程のreplaceメソッドの基本的な使い方と同じように、”第三営業部”を”第二営業部”に置換したい場合、Replace関数を使用してマクロを作成すると次のようになります。
Sub Replace比較1()
Dim i As Long
For i = 5 To 14
Cells(i, 3) = Replace(Cells(i, 3), "第三営業部", "第二営業部")
Next
End Sub
このマクロでは、For Nextステートメントを組み合わせることによって、Replace関数による処理をC5セルからC14セルまで繰り返しています。今回は繰り返しの回数は10回なのであまり関係ありませんが、セルの範囲が大きい場合、Replace関数とFor Nextステートメントを組み合わせたマクロは処理に時間がかかることがあります。実行したい内容や処理速度を考慮した上でReplace関数とReplaceメソッドを使い分けるようにしましょう。
ワイルドカードや正規表現を利用したい場合
Replaceメソッドはアスタリスク(*)使用したワイルドカードや、正規表現を利用することができます。例えば先程のreplaceメソッドの基本的な使い方と同じ場面において、”営業部”を後ろに含む文字列を、”東京営業部”に置換するとしましょう。
Sub Replace比較2()
Range("C5:C14").Replace What:="*" & "営業部", Replacement:="東京営業部"
MsgBox "置換が完了しました"
End Sub
今回は引数 Whatに「”*” & “営業部”」 が指定されているため、「第一営業部」、「第二営業部」、「第三営業部」の3種類が置換対象になります。Replace関数ではワイルドカードを使用することができないため、ワイルドカードや正規表現を使用したい場合はReplaceメソッドを利用しましょう。
マクロの変数を置換したい場合
Replaceメソッドは変数や特殊文字列を置換対象とすることができません。そのため、例えばこの記事の前半で説明した【応用】改行コードやスペースを削除するの場合、同じことをReplaceメソッドで実行することはできません。オブジェクトと関数の違いについて説明しなければならないため理由は割愛しますが、変数や特殊文字列を置換するときはReplace関数を使用するということを覚えておきましょう。
まとめ
Replace関数とReplaceメソッドについてそれぞれ解説しました。
どちらも、ある文字列を別の文字列に置き換えるときに使用しますが、Replace関数は変数や特殊文字列も置換できる、また、Replaceメソッドはワイルドカードを使用できるという違いがあります。用途や場面によって使い分けるようにしましょう。
「もっとVBAを学んで日頃の業務に活かしたい!」
「独学でVBAを学ぶのは少し不安・・・」
「VBAを効率的に学ぶにはどの講座が良いのだろう・・・」
そんな方にはユースフルの公式LINEがオススメです!元伊藤忠商事経理でExcel実務のプロ、長内孝平(おさ)が運営しており
- VBAを含むExcel無料講義動画480分
- ExcelPro講座VBAコースにも使える!講座割引クーポン
などLINE会員限定の豪華4大特典を無料でプレゼント中です!ぜひコチラ↓の画像をタップして受け取ってくださいね!