SUBSTITUTE・REPLACE関数|文字列の置換テクニック
SUBSTITUTE関数とREPLACE関数は、どちらも文字列の一部を別の文字列に置き換える関数です。SUBSTITUTE関数は指定した文字列を検索して置換し、REPLACE関数は位置を指定して置換します。用途に応じた使い分けが重要です。
各関数の基本構文
SUBSTITUTE関数
=SUBSTITUTE(文字列, 検索文字列, 置換文字列, [置換対象])
REPLACE関数
=REPLACE(文字列, 開始位置, 文字数, 置換文字列)
SUBSTITUTE関数の引数
| 引数 | 説明 | 必須/任意 |
|---|---|---|
| 文字列 | 置換対象の元の文字列 | 必須 |
| 検索文字列 | 置き換えたい文字列 | 必須 |
| 置換文字列 | 置き換え後の文字列 | 必須 |
| 置換対象 | 何番目に出現する検索文字列を置換するか。省略するとすべて置換 | 任意 |
REPLACE関数の引数
| 引数 | 説明 | 必須/任意 |
|---|---|---|
| 文字列 | 置換対象の元の文字列 | 必須 |
| 開始位置 | 置換を開始する位置(1から数える) | 必須 |
| 文字数 | 置換する文字数 | 必須 |
| 置換文字列 | 置き換え後の文字列 | 必須 |
2つの関数の違い
| 項目 | SUBSTITUTE | REPLACE |
|---|---|---|
| 置換の指定方法 | 文字列で検索 | 位置で指定 |
| 複数箇所の置換 | 一括置換可能 | 1箇所のみ |
| 検索文字列の知識 | 必要 | 不要(位置がわかればよい) |
| 大文字・小文字 | 区別する | 関係なし |
SUBSTITUTE関数は「何を」置き換えるかがわかっている場合に使い、REPLACE関数は「どの位置」を置き換えるかがわかっている場合に使います。
実践例1:SUBSTITUTE関数で文字列を置換
電話番号のハイフンを除去する例です。
=SUBSTITUTE(A2, "-", "")
「03-1234-5678」が「0312345678」になります。置換文字列を空文字("")にすることで、削除と同じ効果が得られます。
省略された第4引数はすべての出現箇所を置換するため、2つのハイフンがまとめて除去されます。
実践例2:特定の出現箇所だけを置換
SUBSTITUTE関数の第4引数で、何番目の出現を置換するか指定できます。
「2026/06/15」の最初のスラッシュだけをハイフンに変更する場合は次のようにします。
=SUBSTITUTE(A2, "/", "-", 1)
結果は「2026-06/15」です。1番目のスラッシュだけが置換されます。
すべてのスラッシュを置換する場合は第4引数を省略します。
=SUBSTITUTE(A2, "/", "-")
結果は「2026-06-15」です。
実践例3:REPLACE関数で位置指定の置換
固定フォーマットの文字列で、特定の位置を置換する例です。
商品コード「ABC-001-XL」の中央部分(5文字目から3文字)を変更します。
=REPLACE(A2, 5, 3, "999")
結果は「ABC-999-XL」です。5文字目から3文字分を「999」に置き換えています。
実践例4:SUBSTITUTE関数のネストで複数種類の置換
複数の文字を一度に置換するには、SUBSTITUTE関数をネストします。
全角数字を半角数字に変換する例です。
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, "1", "1"), "2", "2"), "3", "3")
ネストが深くなりすぎる場合は、ASC関数(全角を半角に変換)の使用を検討してください。
=ASC(A2)
実践例5:改行の除去
セル内の改行を除去する例です。改行文字はCHAR(10)で表現します。
=SUBSTITUTE(A2, CHAR(10), " ")
改行をスペースに置き換えています。完全に除去する場合はスペースの代わりに空文字を指定します。
=SUBSTITUTE(A2, CHAR(10), "")
Windowsの場合、キャリッジリターンCHAR(13)も含まれていることがあります。両方を処理する場合は次のようにします。
=SUBSTITUTE(SUBSTITUTE(A2, CHAR(13), ""), CHAR(10), "")
よくあるエラーと対処法
置換されない(SUBSTITUTE関数)
SUBSTITUTE関数は大文字と小文字を区別します。「abc」を検索しても「ABC」は置換されません。
大文字・小文字を区別せずに置換したい場合は、以下のような工夫が必要です。
# UPPERで統一してから比較する方法は直接使えないため、
# 段階的に処理する
=SUBSTITUTE(SUBSTITUTE(A2, "abc", "xyz"), "ABC", "xyz")
#VALUE!エラー(REPLACE関数)
開始位置が0以下の場合や、文字数に負の値を指定した場合に発生します。
意図しない箇所の置換
SUBSTITUTE関数は部分一致で置換するため、意図しない箇所まで置換されることがあります。
# 「日」を「日曜」に置換したいが、「日本」の「日」も置換される
=SUBSTITUTE(A2, "日", "日曜")
# "日本の日" → "日曜本の日曜"
このような場合は、REPLACE関数で位置を指定して置換するか、前後の文字を含めて検索文字列を指定します。
SUBSTITUTE関数の便利なテクニック
特定の文字の出現回数を数える
SUBSTITUTE関数とLEN関数を組み合わせて、特定の文字の出現回数を求められます。
=(LEN(A2) - LEN(SUBSTITUTE(A2, ",", ""))) / LEN(",")
元の文字列の長さから、カンマを除去した文字列の長さを引くことで、カンマの数を計算しています。
n番目の区切り文字の位置を求める
SUBSTITUTE関数とFIND関数を組み合わせて、n番目の区切り文字の位置を求められます。
=FIND("@", SUBSTITUTE(A2, ",", "@", 3))
3番目のカンマを一時的に別の文字(@)に置き換えてから、その位置をFIND関数で求めています。
Google スプレッドシートでの互換性
SUBSTITUTE関数とREPLACE関数はGoogle スプレッドシートでも同じ構文で利用できます。大文字・小文字の区別やCHAR関数の動作も同一です。Google スプレッドシートにはREGEXREPLACE関数という正規表現での置換が可能な関数もあり、複雑なパターンの置換に便利です。
まとめ
SUBSTITUTE関数とREPLACE関数は文字列置換の基本関数です。
- SUBSTITUTE関数は文字列を検索して置換する(複数箇所の一括置換が可能)
- REPLACE関数は位置を指定して置換する
- SUBSTITUTE関数は大文字・小文字を区別する
- ネストすることで複数種類の文字を順番に置換できる
- 改行の除去にはCHAR(10)をSUBSTITUTE関数で処理する
データクレンジングや書式の統一など、実務で欠かせない関数です。目的に応じて2つの関数を使い分けてください。