スプレッドシートで「この文字を別の文字に置き換えたい」と思ったことはありませんか?電話番号のハイフンを消したい、データのカッコを一括で外したい。手作業で直すと時間がかかりますし、何百行もあると修正漏れが怖いですよね。
SUBSTITUTE関数を使えば、指定した文字列をまとめて置換できます。この記事ではスプレッドシートでのSUBSTITUTE関数の基本から、複数文字の一括置換、似た関数との使い分けまで丁寧に解説します。
スプレッドシートのSUBSTITUTE関数の使い方:基本構文と引数の役割
SUBSTITUTE関数は、文字列の中から指定した文字を別の文字に置き換える関数です。読み方は「サブスティテュート」。英語の「Substitute(代わりに置く)」が名前の由来です。
たとえば「東京都渋谷区」の「渋谷」を「新宿」に置き換えて「東京都新宿区」にできます。Excelの「検索と置換」機能のように使えますが、数式なので元データを壊さずに結果を得られるのがポイントです。
4つの引数の役割
=SUBSTITUTE(対象テキスト, 検索文字列, 置換文字列, [出現回数])
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 対象テキスト | 必須 | 置換元のセルまたはテキスト |
| 検索文字列 | 必須 | 置き換えたい文字列 |
| 置換文字列 | 必須 | 置き換え後の文字列(空文字””で削除) |
| 出現回数 | 省略可 | 何番目の一致だけを置換するか(省略で全置換) |
第4引数は省略するケースがほとんどです。省略すると一致する文字列をすべて置き換えます。
基本的な使い方
セルA2に「2024/03/18」が入っているとします。
=SUBSTITUTE(A2, "/", "-") → 「2024-03-18」
スラッシュをハイフンに置き換えました。対象テキストに「/」が2つありますが、第4引数を省略しているので両方とも置き換わります。
置換文字列に空文字(””)を指定すれば、文字の削除としても使えます。
=SUBSTITUTE(A2, "/", "") → 「20240318」
検索文字列が見つからなくてもエラーにはなりません。元テキストがそのまま返るだけなので、「置換できていない」事故に気づきにくいのです。
SUBSTITUTE関数でよく使う実務パターン
スペース・改行・不要文字を削除する
データのコピペで混入する余分なスペースや改行は、SUBSTITUTE関数で一掃できます。
=SUBSTITUTE(A2, " ", "") → 半角スペースを削除
=SUBSTITUTE(A2, " ", "") → 全角スペースを削除
=SUBSTITUTE(A2, CHAR(10), "") → 改行を削除
改行は目に見えないので直接入力できません。CHAR(10)で改行コードを指定するのがコツです。
電話番号のハイフンを消す
電話番号を「数字だけ」にしたい場面はよくありますよね。
=SUBSTITUTE(A2, "-", "")

A2に「03-1234-5678」が入っていれば「0312345678」が返ります。ハイフンが2つあっても全置換なので1回の数式で完了です。
!_images/spreadsheet-substitute-function/01_data_phone-numbers.png
複数の文字列を一括置換する(ネストSUBSTITUTE)
SUBSTITUTE関数は1回の呼び出しで1種類の文字しか置換できません。複数の文字を置き換えたい場合は、SUBSTITUTE関数を入れ子(ネスト)にします。
たとえばA2に「(株)ABC商事」が入っていて、カッコを両方消したい場合です。
=SUBSTITUTE(SUBSTITUTE(A2, "(", ""), ")", "") → 「株ABC商事」
!_images/spreadsheet-substitute-function/04_formula_substitute-nest.png
ちょっとむずかしく見えますが、やっていることはシンプルです。
- 内側の
SUBSTITUTE(A2, "(", "")で「(」を削除 → 「株)ABC商事」 - 外側の
SUBSTITUTE(..., ")", "")で「)」を削除 → 「株ABC商事」
!_images/spreadsheet-substitute-function/05_result_substitute-nest.png
3つ以上の文字を消したいときは、さらにネストを重ねます。
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, "(", ""), ")", ""), "株", "")
ネストが深くなると読みにくくなります。3段以上になる場合は、後述するREGEXREPLACE関数のほうがすっきり書けますよ。
第4引数で「何番目だけ」を指定する方法
同じ文字が複数ある場合の挙動
第4引数を省略するとすべて置換されます。しかし「1番目だけ」「3番目だけ」を置き換えたい場合もありますよね。
A2に「りんご-みかん-りんご-ぶどう」が入っています。
=SUBSTITUTE(A2, "りんご", "バナナ") → 「バナナ-みかん-バナナ-ぶどう」
=SUBSTITUTE(A2, "りんご", "バナナ", 1) → 「バナナ-みかん-りんご-ぶどう」
=SUBSTITUTE(A2, "りんご", "バナナ", 2) → 「りんご-みかん-バナナ-ぶどう」

第4引数に「1」を指定すると、最初の「りんご」だけが置き換わります。「2」なら2番目だけです。
実務活用例
商品コードが「A-001-A-B」のように複数のハイフンで区切られているとします。2番目のハイフンだけをスラッシュに変えたい場合です。
=SUBSTITUTE(A2, "-", "/", 2) → 「A-001/A-B」
全体を変えずにピンポイントで置換できるのが第4引数の強みです。使う場面は限られますが、覚えておくと便利ですよ。
SUBSTITUTE・REPLACE・REGEXREPLACEの使い分け
スプレッドシートには文字列を置換する関数が3つあります。それぞれ「何を基準に置き換えるか」が違います。
3関数の比較表
| 項目 | SUBSTITUTE | REPLACE | REGEXREPLACE |
|---|---|---|---|
| 置換の指定方法 | 文字列検索(何という文字か) | 位置指定(何文字目から何文字分) | 正規表現パターン |
| 大文字/小文字 | 区別する | 位置指定のため無関係 | フラグで制御可能 |
| 複数箇所の置換 | 省略で全置換 | 1か所のみ | パターン一致で全置換 |
| 複数種類の文字 | ネストが必要 | 不可 | 1つの正規表現で対応可能 |
| 難易度 | 低い | 低い | 正規表現の知識が必要 |
使い分けの判断基準はシンプルです。
- 特定の文字列を置き換えたい → SUBSTITUTE
- 特定の位置の文字を置き換えたい → REPLACE
- パターンで柔軟に置き換えたい → REGEXREPLACE
たとえば「3文字目から2文字を消す」ならREPLACEです。「ハイフンを全部消す」ならSUBSTITUTEです。「数字だけ消す」「カッコと中身をまとめて消す」のようにパターンで指定したいならREGEXREPLACEの出番です。
実務で一番使うのはSUBSTITUTEです。まずはSUBSTITUTEを覚えてください。対応できない場面が出てきたら、REPLACEやREGEXREPLACEを検討してみましょう。
よくある失敗と対処法
大文字・小文字の区別に注意
SUBSTITUTE関数は大文字と小文字を区別します。これはFIND関数と同じ仕様です。
=SUBSTITUTE("ABC", "a", "x") → 「ABC」(変化なし)
=SUBSTITUTE("ABC", "A", "x") → 「xBC」
小文字の「a」を検索しても、大文字の「A」にはヒットしません。エラーにはなりません。元テキストがそのまま返るだけなので、「置換できていない」事故に気づきにくいのです。
大文字小文字を無視して置換したいときは、LOWERやUPPERで統一してから使います。
=SUBSTITUTE(LOWER(A2), "abc", "xyz")
ただしこの方法だと出力結果もすべて小文字になります。元の大文字小文字を保持したい場合はREGEXREPLACE関数の(?i)フラグを検討してください。
全角・半角の罠
もうひとつよくあるのが、全角と半角の違いに気づかないケースです。
=SUBSTITUTE(A2, " ", "") → 半角スペースだけ削除
=SUBSTITUTE(A2, " ", "") → 全角スペースだけ削除
半角スペースと全角スペースは別の文字として扱われます。見た目がほぼ同じなので気づきにくいのがやっかいです。
「スペースを消したはずなのに残っている」と思ったら、全角・半角の混在を疑ってください。両方消したい場合はネストで対応します。
=SUBSTITUTE(SUBSTITUTE(A2, " ", ""), " ", "")
ハイフンも同様です。半角「-」と全角「ー」は別物なので注意してくださいね。
まとめ
SUBSTITUTE関数の要点を整理します。
| ポイント | 内容 |
|---|---|
| 基本構文 | =SUBSTITUTE(対象, 検索文字列, 置換文字列, [出現回数]) |
| 全置換 | 第4引数を省略するとすべて置換 |
| 文字の削除 | 置換文字列に空文字(””)を指定 |
| 大文字/小文字 | 区別する(LOWERで回避可能) |
| 全角/半角 | 区別する(ネストで両対応) |
| 見つからない場合 | エラーにならず元テキストを返す |
| 複数種類の置換 | ネストで対応(3種以上はREGEXREPLACE推奨) |
SUBSTITUTE関数は「この文字を別の文字に変えたい」というシンプルな要望に応える関数です。電話番号のハイフン削除やスペースの除去など、日常的なデータ整理で大活躍します。
まずはハイフンやスペースの削除から試してみてください。慣れてきたらネストで複数文字の一括置換に挑戦して、データクリーニングの幅を広げていきましょう。
