「VBAで文字列の置換をするにはどうしたらいいんだろう?」
こんな疑問をお持ちではありませんか?

・特定の文字列を別の文字列に変換したい
・セル内の複数のキーワードを一括で置換したい



その場合は、VBAの「Replace関数」を
使用すると解決します!
VBAの「Replace関数」 を使用すると、次のような動作を簡単に実現することができます。
- VBAで文字列を検索し置換
- 配列を使った高度な検索・置換
- Replace関数を活用して業務効率を大幅に向上
この記事では、初心者でも分かりやすいように、Replace関数について具体例を交えながら解説していきます。
最後までお読みいただくことで、Replace関数をマスターし、業務で即活用できるスキルが身につきます!
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
この記事で「できるようになる」こと
- VBAのReplace関数はどんなことができるのか?確認を行う
- Replace関数の基本構成を習得する
- Replace関数の注意ポイントを把握する
- Replace関数のよく使われる使用例を確認する
VBAのReplace関数はどんなことができるのか?



そもそもReplace関数ってどんなことができるの?



Replace関数は、指定した文字列の中で特定の文字や部分を別の文字に置き換えるためのVBA関数です。
文字列操作を効率化し、Excel VBAでのデータ処理をより簡単にしてくれます。
Replace関数の主な特徴
- 文字列の一部を検索して置換
- 例:
'apple'
を'orange'
に置換する処理が簡単にできます。
- 例:
- 開始位置の指定が可能
- 任意の箇所から置換を開始することで、部分的な操作にも対応します。
- 大文字・小文字の区別を選択可能
- 検索時に大文字と小文字を区別するかどうかを柔軟に選べます。
Replace関数の用途
Replace関数は、次のような場面で特に活躍します。
- Excelシートのデータ一括編集
- 商品リスト内の特定ワードを一括置換することができます。
例: 「商品名に含まれる全角スペースを半角スペースに変換」
- 商品リスト内の特定ワードを一括置換することができます。
- ログデータの加工
- 不要な記号やスペースを一括削除して、クリーンなデータに変換できます。
例: 「ログ内のタイムスタンプに不要な括弧を除去」
- 不要な記号やスペースを一括削除して、クリーンなデータに変換できます。
- 配列データの処理
- 複数の検索ワードを一括置換し、複雑なデータ操作も効率化。
次のセクションでは、Replace関数の基本的な使い方を具体例を交えて解説しますので、ぜひご覧ください!
VBA Replace関数の基礎と初心者向け簡単な使用例を徹底解説
ここでは、VBAで文字列を置換する際に便利なReplace関数について、基礎から簡単な使用例までを丁寧に解説します。
初心者でも実際に試しながら学べる構成ですので、ぜひ最後までご覧ください!
構文と引数の基本
Replace(expression, find, replace, [ start, [ count, [ compare ]]])


引数 | 必須/任意 | 説明 | 初期値 |
---|---|---|---|
expression | 必須 | 処理対象となる文字列 | – |
find | 必須 | 検索する文字列 | – |
replace | 必須 | 置換後の文字列 | – |
start | 任意 | 検索を開始する位置(デフォルトは1) | 1 |
count | 任意 | 置換する回数(省略時はすべて置換) | 全て置換 |
compare | 任意 | バイナリ比較またはテキスト比較を指定 ( vbBinaryCompare または vbTextCompare ) | vbBinaryCompare |
さらに詳細な仕様については、Microsoft公式のReplace 関数を参照してください。
文字列比較モード(compare
引数)の詳細解説
Replace関数のcompare
引数を使うことで、検索時の文字列の比較方法を指定できます。
ここでは、初心者がよく使う2つの設定を中心に解説します。
■ よく使う2つの値
設定名 | 説明 |
---|---|
vbBinaryCompare (デフォルト) | 文字コードそのものを比較します。 ひらがな・カタカナ、全角・半角、大文字・小文字をすべて区別します。 |
vbTextCompare | テキストとして比較します。 ひらがな・カタカナ、全角・半角、大文字・小文字を区別しません。 |
■ 特殊なケースで使う値つの値
設定名 | 説明 |
---|---|
vbUseCompareOption | ファイルの上部で設定する「Option Compare」の設定を使用します (通常は Binary )。 |
vbDatabaseCompare | Microsoft Access専用です。 Accessのデータベース設定に基づいて文字列を比較します。Excel VBAでは使えません。 |
Replace関数の基本的な使用例をご紹介
以下に、初心者でも簡単に使える基本的なコード例を紹介します。
使用例1:文字列を別の文字列に単純置換する
以下のコードでは、「りんご」を「オレンジ」に置換します。
Sub ReplaceBasicExample()
Dim text As String
Dim result As String
'// 変換前のテキスト
text = "私はりんごが好きです。りんごは私のお気に入りの果物です。"
'//Replace関数で置換
result = Replace(text, "りんご", "オレンジ")
'// 結果出力
MsgBox "変換前: " & text & vbCrLf & "" & vbCrLf & "変換後: " & result
End Sub
■ 結果


使用例2:ひらがな・カタカナの違いを考慮した置換
Replace関数では、「ひらがな」と「カタカナ」を区別するかどうかを引数compare
で指定できます。
Sub ReplaceHiraganaKatakana()
Dim text As String
Dim resultSensitive As String
Dim resultInsensitive As String
'// 変換前のテキスト
text = "りんごとリンゴは同じではありません。"
'// ひらがな・カタカナを区別する置換
resultSensitive = Replace(text, "りんご", "オレンジ", , , vbBinaryCompare)
'// ひらがな・カタカナを区別しない置換
resultInsensitive = Replace(text, "りんご", "オレンジ", , , vbTextCompare)
MsgBox "元の文字列: " & text & vbCrLf & vbCrLf & _
"区別あり: " & resultSensitive & vbCrLf & vbCrLf & _
"区別なし: " & resultInsensitive
End Sub
■ 結果


Replace関数を使う際の注意点とトラブル回避のコツ
Replace関数を利用する際には、意図しない動作や制限に注意する必要があります。
ここでは、特に初心者がつまずきやすい注意点をわかりやすく解説します。
注意1: 空白削除で意図しないトラブルが発生するかも
Replace関数を使って空白を削除する際には、すべての空白が削除されることで、可読性やフォーマットが損なわれる場合があります。
このように、空白削除による弊害を防ぐためには、削除対象を明確に指定し、適切な関数を選択することが重要です。
問題のコード例
以下のコードは、文章内のすべての空白を削除してしまう例です。
Sub ReplaceAllSpaces()
Dim text As String
Dim result As String
'// 元の文字列
text = "Hello World! Welcome to VBA."
'// 空白を削除
result = Replace(text, " ", "")
'// 結果を表示
MsgBox "変換前: " & text & vbCrLf & vbCrLf & _
"変換後: " & result
End Sub
■ 処理結果
単語間の空白も削除されてしまい、文章が読みにくくなります。


解決策1: Trim関数を使用して不要な空白のみ削除する
文章全体の空白を削除するのではなく、前後の余計な空白を削除したい場合は、Trim関数を使用するのが効果的です。
Sub TrimSpaces()
Dim text As String
Dim result As String
'// 元の文字列
text = " Hello World! Welcome to VBA. "
'// 前後の空白のみ削除
result = Trim(text)
'// 結果を表示
MsgBox "変換前: " & text & vbCrLf & "変換後: " & result
End Sub
■ 処理結果


Trim関数は先頭と末尾の空白だけを削除します。
注意2. ワイルドカードは使用できない
Replace関数では、*
や?
などのワイルドカードを使った柔軟な検索・置換はできません。
これにより、パターンマッチングが必要な場合には限界があります。
コード例:Replace関数でワイルドカードを使おうとすると…
Sub ReplaceWildcardIssue()
Dim text As String
Dim result As String
'// 元の文字列
text = "abc123abc456"
'// ワイルドカード的な置換(実際には動作しない)
result = Replace(text, "abc*", "")
'// 結果を表示
MsgBox "変換後: " & result
End Sub
■ 処理結果
このコードでは、ワイルドカードを使用してabc*
(abcに続く任意の文字列)を削除しようとしています。
しかし、Replace関数はワイルドカードを解釈しないため、意図した置換は行われません。


解決策: 正規表現を使う
ワイルドカードや複雑なパターンを扱いたい場合は、正規表現「VBScript.RegExpオブジェクト」を利用しましょう。
Sub ReplaceWithRegex()
Dim regex As Object
Dim text As String
Dim result As String
'// 正規表現オブジェクトの作成
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "abc\d+" '// abcに続く1つ以上の数字を検索
regex.Global = True
'// 元の文字列
text = "abc123abc456"
'// 正規表現で置換
result = regex.Replace(text, "")
'// 結果を表示
MsgBox "変換後: " & result
End Sub
■ 処理結果
正規表現のPattern
を具体的に指定することでワイルドカードと同様な処理が可能となります。


正規表現を使うことで、パターンマッチングに基づいた柔軟な置換が可能になります。
実践でよく使用されるReplace関数の使用例をご紹介
ここからは、VBAのReplace関数の具体的な使用例を紹介します。
以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
使用例1: 配列内の商品名を一括置換し、変更後のリストを出力する
このコードでは、商品リスト(配列)内の特定の商品名(例: “りんご”)を別の名称(例: “アップル”)に置き換え、変更前後のリストを確認します。
コード例 | 配列内の商品名を一括置換して出力
Sub ReplaceProductNames()
Dim productList As Variant
Dim i As Long
'// 商品リスト
productList = Array("りんご", "バナナ", "みかん", "りんご", "ぶどう")
'// 置換前を出力
Debug.Print "置換前の商品リスト: " & Join(productList, ", ")
'// 配列内の商品名を一括置換
For i = LBound(productList) To UBound(productList)
productList(i) = Replace(productList(i), "りんご", "アップル")
Next i
'// 置換後を出力
Debug.Print "置換後の商品リスト: " & Join(productList, ", ")
End Sub
処理結果


コードの動作概要
配列productList
に商品名を格納します。
この配列には5つの商品名が含まれています。
Debug.Print
を使用して、置換前の商品リストをデバッグウィンドウに表示します。
Forループを使い、配列内のすべての要素に対してReplace関数を適用します。
「りんご」を「アップル」に置き換えます。
置換処理が終わった後、Debug.Print
を使って変更後のリストをデバッグウィンドウに出力します。
このコードで使用している機能
機能名 | 説明 |
---|---|
Array | 配列を作成して複数の商品名を格納します。 |
Replace | 配列内の各要素を指定した文字列に置換します。 |
For | 配列内の全要素を順に処理するループ処理を行います。 |
Debug.Print | デバッグウィンドウにデータを出力します。 |
Join | 配列の要素を1つの文字列に結合します(カンマ区切り)。 |
LBound / UBound | 配列の最小/最大インデックスを取得し、ループの範囲を決定します。 |
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub ReplaceProductNames()
- サブルーチン「ReplaceProductNames」を定義します。
このサブルーチンでは商品リストを一括置換し、変更前後を出力します。
- サブルーチン「ReplaceProductNames」を定義します。
- Dim productList As Variant
- 「productList」: 商品名を格納する配列。
- Dim i As Long
- 「i」: ループ用のインデックス変数。
- productList = Array(“りんご”, “バナナ”, “みかん”, “りんご”, “ぶどう”)
- 商品名を配列「productList」に格納します。
この例では5つの商品名が含まれています。
- 商品名を配列「productList」に格納します。
- Debug.Print “置換前の商品リスト: ” & Join(productList, “, “)
- 置換前の商品リストをデバッグウィンドウに出力します。
Join関数を使用して配列をカンマ区切りの文字列に変換しています。
- 置換前の商品リストをデバッグウィンドウに出力します。
- For i = LBound(productList) To UBound(productList)
- 配列内のすべての要素を処理するため、最小インデックス「LBound」から最大インデックス「UBound」までの範囲でループを開始します。
- productList(i) = Replace(productList(i), “りんご”, “アップル”)
- 現在の配列要素(productList(i))内で、文字列”りんご”を”アップル”に置換します。
- Next i
- 次の要素を処理するためにループを進めます。
- Debug.Print “置換後の商品リスト: ” & Join(productList, “, “)
- 置換後の商品リストをデバッグウィンドウに出力します。
- End Sub
- サブルーチンを終了します。
総括・ポイント
このコードは、配列内の商品名を一括置換する基本的な使用例です。
変更前後をデバッグウィンドウに出力することで、処理内容を可視化しています。
- Replace関数の応用
- 配列内の各要素を効率的に置換する方法を学べます。
- デバッグで変更内容を確認
Debug.Print
を使って変更前後を比較することで、処理結果を容易に確認できます。
- 実務での応用
- 商品リストの表記変更やデータのフォーマット調整に役立つ実用的なコードです。
使用例2: 商品コードリストの特定部分を置換する
このコードでは、商品コードリスト内の特定の文字列(例: “A”)を別の文字列(例: “X”)に置き換え、変更前後をデバッグウィンドウで確認します。
コード例 | 商品コードの一括置換
Sub ReplaceProductCodes()
Dim productCodes As Variant
Dim i As Long
'// 商品コードリスト
productCodes = Array("A123", "B234", "A456", "C789", "A999")
'// 置換前を出力
Debug.Print "置換前の商品コードリスト: " & Join(productCodes, ", ")
'// 配列内の商品コードを一括置換
For i = LBound(productCodes) To UBound(productCodes)
productCodes(i) = Replace(productCodes(i), "A", "X")
Next i
'// 置換後を出力
Debug.Print "置換後の商品コードリスト: " & Join(productCodes, ", ")
End Sub
処理結果


コードの動作概要
商品コードを配列productCodes
に格納します。
この配列には5つの商品コードが含まれています。
Debug.Print
を使用して、置換前の商品コードリストをデバッグウィンドウに表示します。
Forループを使い、配列内のすべての要素に対してReplace関数を適用します。
「A」を「X」に置き換えます。
置換処理が終わった後、Debug.Print
を使って変更後のリストをデバッグウィンドウに出力します。
このコードで使用している機能
機能名 | 説明 |
---|---|
Array | 配列を作成して複数の商品コードを格納します。 |
Replace | 配列内の各要素を指定した文字列に置換します。 |
For | 配列内の全要素を順に処理するループ処理を行います。 |
Debug.Print | デバッグウィンドウにデータを出力します。 |
Join | 配列の要素を1つの文字列に結合します(カンマ区切り)。 |
LBound/UBound | 配列の最小/最大インデックスを取得し、ループの範囲を決定します。 |
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub ReplaceProductCodes()
- サブルーチン「ReplaceProductCodes」を定義します。
このサブルーチンでは商品コードリストの特定部分を一括置換します。
- サブルーチン「ReplaceProductCodes」を定義します。
- Dim productCodes As Variant
- 「productCodes」: 商品コードを格納する配列。
- Dim i As Long
- 「i」: ループ用のインデックス変数。
- productCodes = Array(“A123”, “B234”, “A456”, “C789”, “A999”)
- 商品コードを配列「productCodes」に格納します。
この例では5つの商品コードが含まれています。
- 商品コードを配列「productCodes」に格納します。
- Debug.Print “置換前の商品コードリスト: ” & Join(productCodes, “, “)
- 置換前の商品コードリストをデバッグウィンドウに出力します。
Join関数を使用して配列をカンマ区切りの文字列に変換しています。
- 置換前の商品コードリストをデバッグウィンドウに出力します。
- For i = LBound(productCodes) To UBound(productCodes)
- 配列内のすべての要素を処理するため、最小インデックス「LBound」から最大インデックス「UBound」までの範囲でループを開始します。
- productCodes(i) = Replace(productCodes(i), “A”, “X”)
- 現在の配列要素(productCodes(i))内で、文字列”A”を”X”に置換します。
- Next i
- 次の要素を処理するためにループを進めます。
- Debug.Print “置換後の商品コードリスト: ” & Join(productCodes, “, “)
- 置換後の商品コードリストをデバッグウィンドウに出力します。
- End Sub
- サブルーチンを終了します。
総括・ポイント
このコードは、Replace関数を使用して配列内の特定部分を一括置換する実用的な例です。
変更前後のデータを比較することで、処理結果を簡単に確認できます。
- Replace関数の実用例
- 商品コードや識別子の一括変更に最適な手法です。
- デバッグで確認
Debug.Print
を活用することで、変更前後のデータを比較しやすくなります。
- 応用可能性
- 商品コードのフォーマット変更や特定パターンの修正に応用できます。
使用例3: セル内の部門コードを変更して、変更前後を比較
このコードでは、ワークシートのセル範囲内にある部門コード(例: “HR”)を新しい部門コード(例: “Human Resources”)に変更します。
変更前後の結果をデバッグウィンドウで確認します。
コード例 | セル範囲内の部門コードを変更
Sub ReplaceDepartmentCodes()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Dim originalText As String
Dim replacedText As String
'// シートと範囲を設定
Set ws = ThisWorkbook.Sheets(1)
Set rng = ws.Range("A2:A6") '// A列の範囲内を処理対象に設定
'// セル範囲内をループ処理
For Each cell In rng
If Not IsEmpty(cell.Value) Then '// セルが空白でない場合
originalText = cell.Value
replacedText = Replace(originalText, "HR", "Human Resources")
'// 変更前後をデバッグウィンドウに出力
Debug.Print "変更前: " & originalText & " | 変更後: " & replacedText
'// セルの値を置換後の値に変更
cell.Value = replacedText
End If
Next cell
'// 処理完了メッセージ
MsgBox "部門コードの置換が完了しました。", vbInformation
End Sub
処理結果


コードの動作概要
Set ws
で処理対象のワークシートを設定し、Set rng
でセル範囲(B2:B11)を指定します。
For Eachループを使い、範囲内のすべてのセルを順番に処理します。
空のセルはスキップされます。
Replace関数で「HR」を「Human Resources」に置換します。
これにより、コードの意味が分かりやすく統一されます。
デバッグウィンドウに変更前後の値を出力します。
置換後の値をセルに書き戻します。
全セルの処理が終了した後、メッセージボックスで通知します。
このコードで使用している機能
機能名 | 説明 |
---|---|
Set | ワークシートやセル範囲を設定します。 |
Range | セル範囲を指定します(ここではB2:B11)。 |
For Each | セル範囲内の各セルを順に処理します。 |
IsEmpty | セルが空であるかを判定します。 |
Replace | セルの値の特定部分を別の文字列に置換します。 |
Debug.Print | デバッグウィンドウに変更前後のデータを出力します。 |
MsgBox | 処理完了時にメッセージを表示します。 |
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub ReplaceDepartmentCodes()
- サブルーチン「ReplaceDepartmentCodes」を定義します。
このサブルーチンでは、部門コードを新しい形式に変更します。
- サブルーチン「ReplaceDepartmentCodes」を定義します。
- Dim ws As Worksheet
- 「ws」: 処理対象のワークシートを格納します。
- Dim rng As Range
- 「rng」: 処理対象のセル範囲を格納します。
- Dim cell As Range
- 「cell」: 範囲内の各セルを順に処理するための変数です。
- Dim originalText As String
- 「originalText」: 変更前のセル値を格納します。
- Dim replacedText As String
- 「replacedText」: 置換後のセル値を格納します。
- Set ws = ThisWorkbook.Sheets(1)
- 「ws」:1番目のワークシートを設定します。
- Set rng = ws.Range(“B2:B11”)
- 「rng」:「B2:B11」のセル範囲を指定します。
- For Each cell In rng
- セル範囲内の各セルを順に処理するため、For Eachループを開始します。
- If Not IsEmpty(cell.Value) Then
- セルが空でない場合のみ、以下の処理を実行します。
- originalText = cell.Value
- 変数「originalText」にセルの値を格納します。
- replacedText = Replace(originalText, “HR”, “Human Resources”)
- Replace関数を使用して、変数「originalText」の「HR」を「Human Resources」に置換し、結果を変数「replacedText」に格納します。
- Debug.Print “変更前: ” & originalText & ” | 変更後: ” & replacedText
- 変更前後の値をデバッグウィンドウに出力します。
- cell.Value = replacedText
- 置換後の値をセルに書き戻します。
- End If
- If分を終了します。
- Next cell
- 次のセルを処理するためにループを進めます。
- MsgBox “部門コードの置換が完了しました。”, vbInformation
- 処理が完了したことを通知するメッセージボックスを表示します。
- End Sub
- サブルーチンを終了します。
総括・ポイント
このコードは、セル範囲内の部門コードを一括変更する実践的な例です。
変更前後をデバッグウィンドウで確認できるため、データがどのように変化したかが一目で分かります。
- Replace関数の業務応用例
- 部門コードやフォーマット変更など、実務で頻繁に必要な処理に活用できます。
- デバッグウィンドウの活用
- 処理の内容を可視化することで、正確な動作を確認できます。
- 範囲指定で効率化
- 必要な範囲だけに処理を適用することで効率的なデータ整形が可能です。
この記事のまとめ
この記事では、VBAのReplace関数について、基礎から応用までを幅広く解説しました。
文字列操作の基本的な仕組みから、配列やセルデータを扱った実践的な例までを紹介し、業務効率化に役立つポイントを紹介できたと思います。
ポイントのおさらい
- Replace関数の基礎と使い方を学ぶ
- Replace関数を使用することで、以下のような文字列操作が簡単に行えることを学びました。
- 特定の文字列の検索と置換
- 文字列比較モード(大文字・小文字、全角・半角、ひらがな・カタカナなど)の設定
- 置換対象の開始位置や置換回数の指定
⇒ 「VBA Replace関数の基礎と初心者向け簡単な使用例を徹底解説」をもう一度見る
- Replace関数を使用することで、以下のような文字列操作が簡単に行えることを学びました。
- Replace関数の注意点を理解する
- Replace関数にはいくつかの制限や注意点があり、意図しない動作を防ぐための工夫が必要です。
特に次の2点について詳しく解説しました。- 空白削除の副作用
- 空白を削除する際の影響と、Trim関数を使った前後の空白のみ削除する方法。
- ワイルドカード非対応の制限
- ワイルドカードを扱えないReplace関数の代替手段として、正規表現を用いる方法。
⇒ 「Replace関数を使う際の注意点とトラブル回避のコツ」をもう一度見る
- ワイルドカードを扱えないReplace関数の代替手段として、正規表現を用いる方法。
- 空白削除の副作用
- Replace関数にはいくつかの制限や注意点があり、意図しない動作を防ぐための工夫が必要です。
- Replace関数の使用例を確認する
- Replace関数を使った実践的な使用例を3つ紹介しました。
いずれも、業務での活用が想定される具体的なシナリオに基づいています。
⇒ 「実践でよく使用されるReplace関数の使用例をご紹介」をもう一度見る
- Replace関数を使った実践的な使用例を3つ紹介しました。
今回の学びを活用するために
Replace関数は、VBAでの文字列操作において非常に重要なツールです。
今回の解説をもとに、以下の場面で効果的に活用できます。
- データ整形の効率化
- 不要な文字列の削除や特定の単語の置換などにより、データ加工の時間を大幅に短縮。
- コードの簡潔化
- 繰り返し処理をループで効率的に行うことで、コードの可読性を向上。
- データ分析や自動化の精度向上
- Replace関数を活用することで、データ処理の精度が向上し、業務自動化の基盤を強化。
この記事を参考に、Replace関数のスキルを日々の業務で積極的に活用してみてください。

