スプレッドシートで「3文字目から2文字だけ置き換えたい」と思ったことはありませんか。商品コードの一部だけ変更したい、電話番号の市外局番だけ差し替えたい、個人情報を一部マスクしたい。こうした場面で活躍するのが REPLACE関数 です。
SUBSTITUTE関数は「何という文字を置き換えるか」を指定する関数ですが、REPLACE関数は「何文字目から何文字分を置き換えるか」を指定します。同じ置換系でもアプローチが正反対なので、使い分けができると業務効率がぐっと上がります。
この記事ではスプレッドシートのREPLACE関数について、基本構文から実務テンプレ、FIND関数との組み合わせ応用、SUBSTITUTE・REGEXREPLACE・REPLACEBとの使い分け、エラー対処まで丁寧に解説します。
スプレッドシートのREPLACE関数とは?位置指定で文字列を置換する関数
REPLACE関数は、文字列の中の 指定した位置から指定した文字数分を別の文字に置き換える 関数です。読み方は「リプレース」。英語の Replace(置き換える)がそのまま関数名になっています。
たとえば「ABCDE」の2文字目から3文字分を「XY」に置き換えると「AXYE」になります。位置と長さで置換範囲を決めるので、置き換えたい文字の内容を知らなくても使えるのが最大の特徴です。
「位置で置換」が必要になる業務シーン
実務で位置指定の置換が必要になるのは、データに「固定フォーマット」があるときです。
- 電話番号の市外局番(先頭2〜3桁)
- 管理番号の年度プレフィックス(先頭4桁)
- 商品コードのカテゴリ部分(先頭3桁)
- 携帯番号の中央4桁(マスキング対象)
- 社員番号の所属コード(特定の位置)
これらは「内容で検索する」よりも「位置で指定する」ほうが直感的かつ確実です。SUBSTITUTEで「03を06に」と書くと、電話番号以外のセル内の「03」まで置換してしまう事故が起こり得ますが、REPLACEなら位置で指定するので副作用がありません。
REPLACE関数が向いていないケース
逆に、データに固定フォーマットがなく、置換対象がデータごとに違う場所にある場合はREPLACEには向きません。たとえば「メールアドレスからすべての半角スペースを削除したい」のような用途は、SUBSTITUTE関数やREGEXREPLACE関数のほうが適しています。
REPLACE関数の書き方(構文と引数)
REPLACE関数の構文は次のとおりです。
=REPLACE(テキスト, 開始位置, 文字数, 新しいテキスト)
引数は4つあり、すべて必須です。
| 引数 | 必須/省略可 | 型 | 説明 |
|---|---|---|---|
| テキスト | 必須 | 文字列 | 置換対象のセルまたは文字列 |
| 開始位置 | 必須 | 整数 | 置換を始める位置(1から数える) |
| 文字数 | 必須 | 整数(0以上) | 置換する文字の数 |
| 新しいテキスト | 必須 | 文字列 | 置換後の文字列 |
ここで覚えておきたいポイントは3つあります。
- 開始位置は1始まり(0や負の数を指定すると
#VALUE!エラー) - 文字数は0でもOK(0なら何も削除せず挿入として機能する)
- すべての引数が必須(SUBSTITUTE関数とは違って省略不可)
プログラミング言語の文字列操作は0始まりが多いですが、スプレッドシートの文字列関数はLENもMIDもFINDもすべて1始まりです。慣れるまでは「先頭文字 = 1」と意識して数えてください。
REPLACE関数の基本的な使い方
セルA2に「ABCDEFG」が入っているとします。3文字目から2文字分を「XX」に置き換えてみましょう。

=REPLACE(A2, 3, 2, "XX") → 「ABXXEFG」

3文字目の「C」と4文字目の「D」が「XX」に置き換わりました。開始位置は1始まりなので、A → 1、B → 2、C → 3 と数えています。

文字数を0にすると「挿入」になる
文字数に0を指定すると、元の文字を1文字も削除せずに新しいテキストを挿入できます。これはREPLACE関数の隠れた便利機能です。
=REPLACE(A2, 3, 0, "-") → 「AB-CDEFG」
3文字目の「C」の前にハイフンが挿入されました。先頭に追加したい場合は開始位置を1にします。
=REPLACE(A2, 1, 0, "★") → 「★ABCDEFG」
「セルの内容を消さずに何かを差し込みたい」ときは、わざわざ文字列連結(&)を組み合わせなくてもREPLACE一発で書けます。
開始位置以降をすべて置換する
文字数を大きめに指定すると、開始位置から末尾までを置き換えられます。文字数が残りの文字数を超えてもエラーにはなりません。
=REPLACE(A2, 4, 100, "XYZ") → 「ABCXYZ」
4文字目以降の「DEFG」(4文字)が「XYZ」に置き換わりました。残りが4文字なのに文字数を100にしても問題なく動きます。「この位置から後ろは全部変えたい」ときに、いちいち残り文字数を計算しなくていいテクニックです。
結果は常に文字列型になる
REPLACE関数の戻り値は数値や日付ではなく、常に「文字列型」です。たとえば「2024」(数値)の「20」を「20」に置き換えても、結果は数値の2024ではなく文字列の “2024” になります。
=REPLACE(2024, 1, 2, "20") → "2024"(文字列)
集計や日付計算で使う場合は、後段で VALUE関数 や DATEVALUE関数 を組み合わせて型変換してください。
REPLACE関数の実務活用パターン
ここからは実務で頻出するパターンを順に紹介します。コピペで使えるよう、数式と動作例を並べて掲載します。
パターン1: 電話番号の市外局番を一括変更する
拠点移転で全顧客の電話番号の市外局番を変える、というシナリオです。A2に「03-1234-5678」が入っています。
=REPLACE(A2, 1, 2, "06") → 「06-1234-5678」
1文字目から2文字分(「03」)を「06」に置き換えました。市外局番の桁数が決まっているので、位置指定のREPLACEがぴったりです。
SUBSTITUTEで =SUBSTITUTE(A2, "03", "06") と書くと、たまたま電話番号の中に「03」が含まれる場合(例: 「03-0312-1234」)まで置換してしまうリスクがあります。REPLACEなら開始位置が固定なので、こうした副作用が起きません。

パターン2: 管理番号の年度部分を一括更新する
「2024-A001」のような「年度-連番」フォーマットの管理番号を翌年度に更新するケースです。
=REPLACE(A2, 1, 4, "2025") → 「2025-A001」
先頭4文字の「2024」を「2025」に置き換えました。連番部分はそのままなので、年度切り替え時の一括更新が数式1つで完結します。
パターン3: 個人情報の伏せ字処理(マスキング)
名前や電話番号の一部を「***」で隠す伏せ字処理にもREPLACE関数は役立ちます。A2に「09012345678」(携帯番号)が入っているとします。
=REPLACE(A2, 4, 4, "****") → 「090****5678」
4文字目から4文字分を「****」に置き換えました。先頭3桁と末尾4桁は残しつつ、中間をマスクできます。個人情報を含む一覧を社外配布する前のサニタイズ処理として定番です。
名前の伏せ字にも使えます。A2に「山田太郎」が入っている場合です。
=REPLACE(A2, 2, 1, "○") → 「山○太郎」
2文字目の「田」を「○」に置き換えて、苗字の一部を伏せました。プライバシー配慮が必要な公開資料で使えます。
パターン4: 商品コードのプレフィックス変更
「ABC-1234」のような「カテゴリプレフィックス-連番」形式の商品コードで、プレフィックスだけを変更したい場合です。
=REPLACE(A2, 1, 3, "XYZ") → 「XYZ-1234」
先頭3文字を新カテゴリコードに差し替えました。ハイフン以降の連番はそのまま保持されます。
パターン5: メールアドレスのユーザー名マスク
メールアドレスの「@」より前のユーザー名部分を伏せたいケースです。ただしユーザー名の長さはデータごとに違うので、ここはFIND関数と組み合わせます(詳しくは次のセクション)。
実務での使用シーン早見表
| 業務シーン | 数式テンプレ | 用途 |
|---|---|---|
| 市外局番変更 | =REPLACE(A2,1,2,"06") | 拠点移転対応 |
| 年度更新 | =REPLACE(A2,1,4,"2025") | 年度切り替え |
| 携帯番号マスク | =REPLACE(A2,4,4,"****") | 個人情報配慮 |
| 名前伏せ字 | =REPLACE(A2,2,1,"○") | プライバシー保護 |
| 商品コード変更 | =REPLACE(A2,1,3,"XYZ") | カテゴリ再編 |
| 先頭への挿入 | =REPLACE(A2,1,0,"PRE-") | プレフィックス追加 |
FIND関数と組み合わせて動的に位置を指定する
ここまでの例は、置き換える位置が「先頭から何文字目」と決まっているケースでした。しかし実務では、データによって位置が変わることもよくあります。
そんなときはFIND関数で位置を動的に取得し、REPLACEに渡します。
メールアドレスのドメイン部分を置き換える
A2に「user@old-domain.com」が入っています。「@」より後ろを新しいドメインに差し替えたい場合です。
=REPLACE(A2, FIND("@", A2), LEN(A2) - FIND("@", A2) + 1, "@new-domain.com")
結果は「user@new-domain.com」です。少し複雑に見えますが、やっていることはシンプルです。
FIND("@", A2)→ 「@」の位置(5)を取得LEN(A2) - FIND("@", A2) + 1→ 「@」以降の文字数(16)を計算- REPLACEで「5文字目から16文字分」を新ドメインに置換
FIND関数が「@」の位置を自動で調べてくれるので、ユーザー名の長さがバラバラのデータ(user、yamada、a など)でも正しく動作します。

区切り文字の前半だけを差し替える
A2に「ABC-12345」が入っていて、ハイフンより前の部分を「XYZ」に変えたい場合です。
=REPLACE(A2, 1, FIND("-", A2) - 1, "XYZ") → 「XYZ-12345」
FIND("-", A2) - 1 でハイフンの手前までの文字数を計算し、先頭からその分だけ置き換えています。LEFT関数で切り出して文字列連結(&)で結合する方法もありますが、REPLACEなら1つの数式で完結します。
メールアドレスのユーザー名をマスクする
A2 に「yamada@example.com」が入っているとします。「@」より前のユーザー名部分を、文字数と同じ数の「*」で伏せたい場合です。
=REPLACE(A2, 1, FIND("@", A2) - 1, REPT("*", FIND("@", A2) - 1))
結果は「@example.com」になります。REPT関数でユーザー名と同じ長さの「*」を生成し、それで丸ごと置き換えています。ドメイン部分は残るので「どのドメインのアドレスか」は確認しつつ、個人特定はできない状態にできます。
FIND関数との組み合わせで注意する点
- 検索文字が見つからないと FIND は
#VALUE!エラーを返します。IFERRORでラップすると安全です - 同じ文字が複数あるときは FIND は最初の位置を返します。N番目を取得したい場合は SUBSTITUTE関数 と組み合わせるテクニックがあります
- 大文字小文字を無視して位置を取りたい場合は SEARCH関数 を使います
ARRAYFORMULAやネストでREPLACE関数を一気に適用する
REPLACE関数は1回の呼び出しで「1つのテキスト」「1か所」の置換しかできません。しかし、Googleスプレッドシート特有の機能を組み合わせると、列全体への一括適用や複数箇所の同時置換も実現できます。
ARRAYFORMULAで列全体に一気に適用する
A2:A100 の電話番号データすべてに市外局番変更を適用したい場合、1セル1セルに数式をコピーする必要はありません。
=ARRAYFORMULA(REPLACE(A2:A100, 1, 2, "06"))
たった1つの数式で100行分の置換結果がスピル(自動拡張)されます。元データが増減してもメンテナンスがラクなので、運用するスプレッドシートに組み込むときに便利です。
ARRAYFORMULAについては ARRAYFORMULA関数の詳しい使い方 を参照してください。
ネスト(入れ子)で複数箇所を同時置換する
1つのセルの中で複数箇所を置換したい場合は、REPLACEを入れ子にします。たとえば「ABCDEFG」の1〜2文字目を「XX」に、5〜6文字目を「YY」に変えたい場合です。
=REPLACE(REPLACE(A2, 5, 2, "YY"), 1, 2, "XX") → 「XXCDYYG」
ポイントは 後ろの位置から先に置換すること です。先に前の位置を置換すると、置換結果によって後ろの位置がずれてしまう可能性があります(文字数が変わる置換の場合)。
文字数が同じ置換(例: 2文字→2文字)であれば順序は問いませんが、安全のために「後ろから前へ」を癖にしておくと事故が減ります。
複数箇所の置換はREGEXREPLACEのほうが楽な場合もある
3か所以上を一気に置換したい場合、REPLACEのネストは可読性が落ちます。正規表現が使える場合は REGEXREPLACE関数 のほうが見やすい数式になります。
=REGEXREPLACE(A2, "AB|EF", "XX")
ただし正規表現の学習コストはあるので、用途と頻度に応じて選んでください。
REPLACE関数とSUBSTITUTE・REGEXREPLACE・REPLACEBの使い分け
スプレッドシートには文字列置換系の関数がいくつかあります。用途を正しく選ぶことで、シンプルで保守しやすい数式が書けます。
REPLACE vs SUBSTITUTE
一番よく比較されるのが REPLACE と SUBSTITUTE です。ひとことで言えば、SUBSTITUTEは「文字」で指定、REPLACEは「位置」で指定 です。
| 比較項目 | REPLACE | SUBSTITUTE |
|---|---|---|
| 指定方法 | 位置と文字数 | 検索文字列 |
| 引数の数 | 4つ(すべて必須) | 3〜4つ(4番目は省略可) |
| 複数箇所の置換 | 1か所のみ(ネスト要) | 標準で全置換 |
| 大文字/小文字 | 区別しない | 区別する |
| 挿入動作 | 文字数=0で可能 | 不可 |
| 向く場面 | 固定フォーマット・伏せ字 | 検索置換・全置換 |
判断基準はシンプルです。
- 置き換えたい文字の 「内容」がわかっている → SUBSTITUTE
- 置き換えたい文字の 「位置」がわかっている → REPLACE
「ハイフンを全部消したい」ならSUBSTITUTEです。「3文字目から2文字を変えたい」ならREPLACEです。実務で使う頻度はSUBSTITUTEのほうが圧倒的に高いですが、REPLACEは固定フォーマットの一部更新や伏せ字処理など、限定的だが代替の効かない場面で活躍します。
REPLACE vs REGEXREPLACE
REGEXREPLACE関数は正規表現パターンで置換する関数です。
| 比較項目 | REPLACE | REGEXREPLACE |
|---|---|---|
| 指定方法 | 位置と文字数 | 正規表現パターン |
| 学習コスト | 低い | 高い |
| 柔軟性 | 低い | 非常に高い |
| 向く場面 | 位置が固定 | パターンマッチが必要 |
「数字3桁の後にハイフンが来る場所」のような複雑な条件で置換したい場合は REGEXREPLACE が圧倒的に強いです。一方、位置が決まっていて単純な置換ならREPLACEが直感的で速いです。
REPLACE vs REPLACEB
REPLACEB関数は「バイト数」で位置と長さを指定する関数です。
| 比較項目 | REPLACE | REPLACEB |
|---|---|---|
| 単位 | 文字数 | バイト数 |
| 全角の扱い | 1文字 = 1 | 1文字 = 2 |
| 半角の扱い | 1文字 = 1 | 1文字 = 1 |
| 向く場面 | 一般的な処理 | レガシーシステム連携 |
「全角文字を2バイトとして扱うシステムにデータを連携する」など、バイト単位の境界が必要な場面でREPLACEBを使います。日常業務では REPLACE で十分なケースがほとんどです。
使い分けフローチャート
迷ったらこの順で考えてください。
- 置換場所が正規表現で表現できるパターン → REGEXREPLACE
- 置換場所が「特定の文字列」 → SUBSTITUTE
- 置換場所が「先頭からN文字目」 → REPLACE
- バイト単位で処理する必要がある → REPLACEB
よくあるエラーと対処法
#VALUE!エラーが出る
開始位置に0以下の数値を指定するとエラーになります。REPLACE関数の開始位置は 1始まり です。
=REPLACE(A2, 0, 2, "XX") → #VALUE!エラー
=REPLACE(A2, 1, 2, "XX") → 正常動作
プログラミングに慣れている方は0始まりで考えがちですが、スプレッドシートの文字列関数は1始まりです。MID関数やFIND関数も同じルールです。
文字数に負の数を指定した場合もエラー
文字数(length)はゼロ以上の整数である必要があります。負の数を指定すると #VALUE! エラーです。
=REPLACE(A2, 3, -1, "XX") → #VALUE!エラー
開始位置がテキスト長を超えている場合
開始位置がテキストの文字数より大きいと、エラーにはならず 末尾に新しいテキストが追加 されます。
=REPLACE("ABC", 10, 2, "XY") → 「ABCXY」
意図しない結果になりやすいので、開始位置は元のテキストの文字数以内になっているか確認してください。LEN関数で事前チェックする方法もあります。
=IF(開始位置 > LEN(A2), "範囲外", REPLACE(A2, 開始位置, 文字数, "新テキスト"))
空セルを渡した場合
テキストが空セルや空文字列の場合、エラーにはならず新しいテキストだけが返ります。
=REPLACE("", 1, 0, "ABC") → 「ABC」
元データが空なのに結果が出力される点に注意してください。空セルチェックにはIF関数と組み合わせます。
=IF(A2="", "", REPLACE(A2, 1, 2, "XX"))
エラー一覧
| 症状 | 原因 | 対処 |
|---|---|---|
#VALUE! | 開始位置が0以下 | 開始位置を1以上に |
#VALUE! | 文字数が負の数 | 文字数を0以上に |
#VALUE! | FINDで検索文字が見つからない | IFERROR でラップ |
| 末尾に追記される | 開始位置がテキスト長超過 | LEN関数で事前チェック |
| 空でも結果が出る | テキストが空セル | IF関数で空判定 |
| 数値計算ができない | 戻り値が文字列型 | VALUE関数で型変換 |
よくある質問
REPLACE関数とSUBSTITUTE関数はどちらを使うべきですか?
「どこにあるかわかっている」ならREPLACE、「何という文字かわかっている」ならSUBSTITUTEです。たとえば「電話番号の先頭3桁を変えたい」なら位置が決まっているのでREPLACE。「ハイフンをすべて削除したい」なら文字が決まっているのでSUBSTITUTEが向いています。実務ではSUBSTITUTEのほうが使用頻度が高いですが、REPLACEは固定フォーマットの一部更新や伏せ字処理など、限定的だが代替の効かない場面で活躍します。
REPLACE関数で複数箇所を一度に置換できますか?
REPLACE関数は1回の呼び出しで1か所しか置換できません。複数箇所を変えたい場合は、REPLACE関数をネストするか(外側のREPLACEの内側にREPLACEを入れる)、複数の文字を一括変換したい場合はSUBSTITUTE関数やREGEXREPLACE関数を使うほうが効率的です。たとえば =REPLACE(REPLACE(A1,1,2,"XX"),5,3,"YYY") のように入れ子にします。
開始位置にテキストの文字数を超える数値を指定したらエラーになりますか?
エラーにはなりません。開始位置が元のテキストの文字数を超えた場合、テキストの末尾に新しいテキストが追加されます。たとえば =REPLACE("ABC",10,2,"XY") の結果は「ABCXY」になります。意図しない結果になりやすいので、LEN関数で文字数をチェックしてから使うと安全です。
列全体に一気に適用したい場合はどう書きますか?
ARRAYFORMULA関数でラップすると列全体に一括適用できます。たとえば =ARRAYFORMULA(REPLACE(A2:A100, 1, 2, "06")) のように書けば、A2からA100の全行に一発で適用されます。1セルずつ数式をコピーする必要がないので、運用するスプレッドシートに組み込むときに便利です。
ExcelのREPLACE関数とGoogleスプレッドシートのREPLACE関数は同じですか?
はい、機能は完全に同じです。構文・動作・エラーの挙動まですべて互換性があります。ExcelとGoogleスプレッドシート間でxlsxファイルをやり取りしても計算結果は変わりません。なお、バイト数で位置を指定する REPLACEB関数 もExcel・スプレッドシート双方にあり、全角文字の処理が必要な場面で役立ちます。
文字を削除せずに挿入だけしたい場合はどう書きますか?
文字数を0に指定すれば、元の文字を1文字も消さずに新しいテキストを挿入できます。=REPLACE(A2, 3, 0, "-") と書けば3文字目の前にハイフンが挿入されます。先頭に追加したい場合は開始位置を1にして =REPLACE(A2, 1, 0, "PRE-") とすればプレフィックスとして機能します。文字列連結(&)を使わずに1関数で書けるので、ARRAYFORMULAとの相性も良いです。
REPLACEの結果が文字列になってしまい計算に使えません
REPLACE関数の戻り値は常に文字列型です。数値として扱いたい場合は VALUE関数 でラップしてください。たとえば =VALUE(REPLACE("2024", 1, 2, "20")) とすれば結果が数値の2024になります。日付として扱いたい場合は DATEVALUE関数 を使います。
大文字小文字を区別した置換はできますか?
REPLACE関数は位置指定なので、大文字小文字の区別という概念がそもそもありません。「大文字のAだけを置換したい」のように内容で区別したい場合はSUBSTITUTE関数(大文字小文字を区別する)を使ってください。大文字小文字を区別せずに検索したい場合は SEARCH関数 との組み合わせが選択肢になります。
まとめ
REPLACE関数の要点を整理します。
| ポイント | 内容 |
|---|---|
| 基本構文 | =REPLACE(テキスト, 開始位置, 文字数, 新しいテキスト) |
| 引数 | 4つすべて必須 |
| 開始位置 | 1始まり(0以下は #VALUE!) |
| 文字数0 | 削除せず挿入として機能 |
| 文字数超過 | エラーにならず末尾まで置換 |
| 位置超過 | エラーにならず末尾に追記 |
| 戻り値 | 常に文字列型 |
| 一括適用 | ARRAYFORMULAでラップ |
| 複数箇所 | ネストまたはREGEXREPLACE |
| SUBSTITUTEとの違い | SUBSTITUTE=文字指定、REPLACE=位置指定 |
| Excel互換 | 完全互換 |
REPLACE関数は「何文字目から何文字分」と位置で指定する置換関数です。固定フォーマットの一部変更や個人情報のマスク、年度プレフィックスの更新など、位置が決まっている場面で大活躍します。
まずは市外局番の差し替えや伏せ字処理から試してみてください。慣れてきたらFIND関数と組み合わせて動的な位置指定にチャレンジし、最終的にはARRAYFORMULAで列全体を一括処理できるようになると、業務効率が一段階上がりますよ。
次に読みたい関連記事
- SUBSTITUTE関数 – 文字列指定で全置換
- REGEXREPLACE関数 – 正規表現で柔軟に置換
- REPLACEB関数 – バイト数で位置指定
- FIND関数 – 文字列の位置を取得
- LEN関数 – 文字数をカウント
- MID関数 – 文字列の途中を抽出
- LEFT関数 – 文字列の先頭を抽出
- RIGHT関数 – 文字列の末尾を抽出
- ARRAYFORMULA関数 – 範囲一括処理