VBAで文字列操作を行う際、特定の文字や部分文字列を他の文字に置き換えることがよくあります。VBAでは、この作業を簡単に行うためのReplace
関数とReplace
メソッドが用意されています。この記事では、これらの違いと使い方について詳しく説明します。
Replace関数の基本と使い方
Replace
関数は、文字列の中から指定した文字を検索して、別の文字に置き換えるための関数です。
構文と引数の解説
Replace
関数の基本的な構文は以下の通りです。
Replace(Expression, Find, Replace, [Start], [Count], [Compare])
引数 | 説明 | 必須/任意 |
---|---|---|
Expression | 置換対象となる文字列 | 必須 |
Find | 検索する文字列 | 必須 |
Replace | 置き換える文字列 | 必須 |
Start | 文字列のどこから検索を開始するかを指定(省略時は1) | 任意 |
Count | 置き換える数を指定(省略時はすべて) | 任意 |
Compare | 文字列比較の方法を指定(省略時はバイナリ比較) | 任意 |
引数のポイント!
- Expression: 元の文字列。
- Find: 検索する文字列。
- Replace: 置き換える文字列。
Start
を指定すると、文字列の途中から置き換えを始めることができます。Count
を使うと、最初の何件だけ置換するなどの制御が可能です。Compare
には以下のオプションがあります。vbBinaryCompare
:大文字・小文字を区別して比較(デフォルト)vbTextCompare
:大文字・小文字を区別せずに比較
注意ポイント
Replace
関数を使う際は、大文字小文字の区別や、検索を開始する位置(Start
)、置き換える回数(Count
)に気をつける必要があります。
特にデータ量が多い場合、意図しない置換が大量発生してしまうリスクがあるため、まずは少量のテストデータで動作確認してから実際のデータに適用するのが安全です。
Replace関数の基本的な使用例
Replace
関数を使った基本的な例を紹介します。
例1:単純な文字列置換
Sub ReplaceSample1()
Dim str As String
str = "Hello World"
str = Replace(str, "World", "VBA")
MsgBox str ' 結果:Hello VBA
End Sub
上記コードでは、「World」という文字を「VBA」に置き換えています。
例2:部分的に置換(Start引数を使用)
Sub ReplaceSample2()
Dim str As String
str = "123-456-123"
str = Replace(str, "123", "999", 5)
MsgBox str ' 結果:123-456-999
End Sub
上記コードではStart
を使用することにより、5文字目以降にある「123」だけを置き換えています。
Replace関数の応用例と注意点
Replace関数の応用例
Replace
関数は、単純な文字列置換だけでなく、複数の語句を一括で置き換えるような応用的な使い方も可能です。
例えば、社名や用語など、いくつもの表現を一気に別の言葉に変えたいときに非常に役立ちます。
以下は、配列とループを組み合わせて複数語を一括置換する例です。
Sub ReplaceMultipleWords()
Dim str As String
Dim findWords As Variant
Dim replaceWords As Variant
Dim i As Long
str = "A社とB社とC社がプロジェクトに参加します"
findWords = Array("A社", "B社", "C社")
replaceWords = Array("Apple Inc.", "BlackRock, Inc.", "Chevron Corporation")
For i = LBound(findWords) To UBound(findWords)
str = Replace(str, findWords(i), replaceWords(i))
Next i
MsgBox str ' 結果:Apple Inc.とBlackRock, Inc.とChevron Corporationがプロジェクトに参加します
End Sub
コードの解説
findWords
配列に置換対象の文字列を格納replaceWords
配列にそれぞれ対応する置換後の文字列を格納- ループで順番にReplaceを実行
このようにすることで、大量の表現を一括で置換できるため、作業効率が大幅にアップします。
Replace関数の注意点
Replace
関数は、指定した文字列に一致するすべての箇所を置き換えます。
そのため、置換対象が予想以上に広がることがあり、意図しない部分が変わってしまうリスクもあります。
特に注意が必要なのはこのようなケースです。
- 短い置換対象文字列(例:「a」や「1」など)
- 単語の一部にマッチしてしまう
具体例を踏まえて考えてみましょう。
例えば、成績表に「優」「良」「可」「不可」といった評価があったとします。
ここで「優」を「秀」に変えたいと考えた場合、次のように置換処理を行うとします。
Sub UnexpectedReplaceGrade()
Dim str As String
str = "あなたは優秀な成績をおさめました。" & vbLf & _
"成績:優、良、可、不可"
' 「優」を「秀」に置換
str = Replace(str, "優", "秀")
MsgBox str
End Sub
このコードを実行すると下記のようなメッセージが表示されます。

問題点
- 「優」という文字が「成績:優」にのみ置換されるべきだったのに、「優秀」も置換対象に含まれてしまった。
- 結果、「秀秀」という意味不明な表現に変わり、文章が読みづらくなってしまった。
この例から分かるように、置換対象の文字列が他の単語の一部として使われている場合、部分一致が原因で予期しない置換が発生することがあります。
例えば、成績表の「優」を「秀」に置換する時、**「優秀」**という単語にもマッチしてしまうため、「秀秀」となってしまいました。
このような問題を避けるためには、単語単位で置換するか、前後のスペースや区切り文字を意識した置換を行うことが重要です。
Replaceメソッドの基本と使い方
Replaceメソッドとは?
Replace
メソッドは、Rangeオブジェクトに対して使う置換機能です。
セルやセル範囲内のデータに対して、文字列を置き換える処理を実行します。
Excelの「検索と置換(Ctrl + H)」を、プログラムで自動化したイメージです。

Replaceメソッドの構文
Replace
メソッドの基本構文は以下の通りです。
RangeObject.Replace(What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat])
引数の説明
引数 | 説明 | 必須/任意 |
---|---|---|
What | 検索する文字列 | 必須 |
Replacement | 置換後の文字列 | 必須 |
LookAt | 部分一致か完全一致か指定(例:xlPart 、xlWhole ) | 任意 |
SearchOrder | 検索順序(行ごとか列ごとか) | 任意 |
MatchCase | 大文字と小文字を区別するかどうか | 任意 |
MatchByte | 半角・全角を区別するかどうか | 任意 |
SearchFormat | 書式を指定して検索するか | 任意 |
ReplaceFormat | 書式を指定して置換するか | 任意 |
Replaceメソッドの基本的な使用例
例1:セル内の文字列置換
下記コードで、A1セル内の「テスト」という文字が「成功」に置き換えられます。
Sub ReplaceCell()
Range("A1").Replace What:="テスト", Replacement:="成功"
End Sub

例2:シート全体で置換
下記コードでは、シート全体の「未入力」という文字を「0」に置き換えています。
Sub ReplaceSheet()
Cells.Replace What:="未入力", Replacement:="0"
End Sub

Replaceメソッドの応用例と注意点
Replaceメソッドの応用例(完全一致のみ置換する)
下記コードでは、セル全体を対象にして「OK」のみ入力されているセルだけ「合格」に変わります。
Sub ReplaceExact()
Cells.Replace What:="OK", Replacement:="合格", LookAt:=xlWhole
End Sub

完全一致の場合のみ置換され、「一部OK」のような部分一致では置換されません。
注意点:書式も置換対象になる場合がある
Replace
メソッドを使うと、書式設定(フォント色・太字など)も一緒に変わってしまうことがあります。
意図しない書式変更を防ぐため、SearchFormat
やReplaceFormat
を適切に設定しましょう。
Replace関数とReplaceメソッドの違い
Replace
関数とReplace
メソッドの違いや使う場面などは下記の表のようになります。
項目 | Replace関数 | Replaceメソッド |
---|---|---|
置換対象 | 文字列変数 | セル・範囲(Rangeオブジェクト) |
使用する場面 | コード内のデータ操作 | ワークシート上のセル編集 |
構文の違い | 関数として戻り値を得る | メソッドとしてセルを直接編集 |
まとめると、
- 文字列変数を置き換えたい → Replace関数
- セルやシート内を置き換えたい → Replaceメソッド
を使うと覚えておけばOKです!
実務での活用例
データクリーニングの事例
- 顧客名の「㈱」をすべて「株式会社」に統一
- 商品リスト中の「(旧)」表記を一括削除
- 住所データの「-」を「丁目」などの正式表記に変換
このように、Replace
関数・Replace
メソッドは、手作業では大変な大量置換作業を自動化できるため、業務効率が飛躍的に向上します!
まとめ
Replace
関数とReplace
メソッドは、いずれも文字列の置換に使える強力な機能です。
違いを理解し、場面に応じて使い分けることで、より効率的なVBAプログラムが書けるようになります。
ぜひこの記事を参考に、実務でもどんどん活用してみてください!