SUBSTITUTE関数は、文字列の中から指定した文字を探して、別の文字に置き換える関数です。置換文字列に "" を指定すれば削除になります。元のデータを書き換えず、別のセルに整形結果を作れる点が、置換ダイアログとの決定的な違いです。
この記事でわかること
- SUBSTITUTE関数の4つの引数と、削除に使う書き方
- ハイフン・空白・改行を一括で消す実務パターン
- 第4引数で「2番目だけ」を置換する方法
- REPLACE関数・TRIM関数・置換ダイアログとの使い分け
- 置換されない・結果が計算に使えないときの原因と直し方
SUBSTITUTE関数の構文と引数
構文
=SUBSTITUTE(文字列, 検索文字列, 置換文字列, [置換対象])
| 引数 | 指定するもの | 注意点 |
|---|---|---|
| 文字列 | 元になるセル、または文字列 | 数値でも指定できるが、結果は文字列になる |
| 検索文字列 | 探す文字 | ワイルドカード(* ?)は使えない |
| 置換文字列 | 置き換えたあとの文字 | "" を指定すると削除になる |
| 置換対象 | 何番目の一致だけを置換するか | 省略すると、見つかったものをすべて置換する |
文字はすべて " で囲みます。囲み忘れると #NAME? になります。
SUBSTITUTE関数はExcel 2016以前から使える古い関数で、どのバージョンでも同じ動作をします。バージョンによる書き方の違いはありません。

基本の使い方
文字を別の文字に置き換える
A2の「東京都」を「東京」に直す式です。
=SUBSTITUTE($A2, "東京都", "東京")
文字を削除する
置換文字列に空文字列 "" を指定すると、削除として働きます。実務で使うのは、圧倒的にこちらです。
=SUBSTITUTE($A2, "-", "")
電話番号や郵便番号のハイフンを外し、他システムへ取り込める形にそろえる用途で使います。
⚠️ 大文字と小文字は区別される
SUBSTITUTE関数は、大文字と小文字を別の文字として扱います。"abc" を探しても ABC は置換されません。両方を処理したいなら、UPPER関数やLOWER関数で先にどちらかへ寄せるか、SUBSTITUTEを2回重ねます。
全角と半角も別の文字です。" "(全角スペース)と " "(半角スペース)は、それぞれ別に指定する必要があります。
実務でよく使う4パターン
① 複数の文字をまとめて消す(入れ子)
SUBSTITUTEは1回に1種類しか処理できないため、種類が増えたら入れ子にします。内側から順に処理されると考えると読めます。
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($A2,"-",""),"(",""),")","")
空白の除去は、半角と全角の両方を指定するのが定石です。
=SUBSTITUTE(SUBSTITUTE($A2," ","")," ","")
内側で半角スペースを消し、その結果から全角スペースを消しています。片方だけだと、見た目には空白が残ったままになります。
② セル内の改行を消す
セル内改行は CHAR(10) という文字コードで入っています。これを検索文字列に指定します。
=SUBSTITUTE($A2, CHAR(10), "")
改行を消すのではなく、半角スペースやカンマに変えたいなら、置換文字列を " " や "," にします。CSVへ書き出す前の整形で使う形です。
③ n番目だけを置き換える(第4引数)
第4引数に数値を入れると、その順番の一致だけが置換されます。
=SUBSTITUTE($A2, "/", "-", 2)
「2026/04/06」なら結果は「2026/04-06」です。1つ目のスラッシュはそのまま残ります。
この引数は、「区切り位置の目印を作る」用途で効きます。文字列を特定の区切りで切り出したいとき、n番目の区切り文字だけを他で使わない記号に置き換え、FIND関数でその位置を求める、という手順が定番です。
④ 単位を外して数値に戻す
「1,200円」のような文字列を計算に使える数値へ直す形です。
=VALUE(SUBSTITUTE(SUBSTITUTE($A2,"円",""),",",""))
SUBSTITUTEの結果は文字列なので、VALUE関数で数値に変換するひと手間が要ります。変換せずに合計すると、SUM関数の集計対象から外れて0のままになります。
応用:特定の文字が何個あるか数える
置換で消した分だけ文字数が減る性質を使うと、出現回数が数えられます。
=LEN($A2)-LEN(SUBSTITUTE($A2,"-",""))
2文字以上のキーワードを数えるなら、差を検索文字列の長さで割ります。
=(LEN($A2)-LEN(SUBSTITUTE($A2,"東京","")))/LEN("東京")

うまくいかないときの原因と直し方
| 症状 | 主な原因 | 直し方 |
|---|---|---|
| 置換されない | 大文字・小文字が違う | UPPERかLOWERで先にそろえる |
| 置換されない | 全角と半角が違う | ASC関数・JIS関数でそろえる、または両方を指定する |
| 置換されない | * や ? をワイルドカードのつもりで使った | SUBSTITUTEでは文字そのものとして扱われる |
| 空白が残る | 半角スペースだけを消した | 全角スペースを消す指定を入れ子で足す |
| 合計に含まれない | 結果が文字列のまま | VALUE関数で数値に変換する |
#VALUE! | 置換対象に 0 や負の数を指定した | 1以上の整数にする |
#NAME? | 検索文字列を " で囲んでいない | 文字は " で囲む |
| 元のデータが消えた | 元の列に直接上書きした | 数式は別列に置き、必要なら値貼り付けで確定させる |
| 見えない文字が残る | 制御文字が混ざっている | CLEAN関数と組み合わせる |
「見た目は同じなのに置換されない」の切り分け
置換されないという相談は、ほぼ指定した文字と実際の文字が違うケースです。次の順で確認すると早く着きます。
=LEN(A2)で文字数を数える — 想定より多ければ、見えない文字が入っている=CODE(MID(A2,3,1))のように1文字ずつ文字コードを確認する — 半角スペースは32=ASC(A2)で半角に寄せて比較する — 全角・半角の混在はこれで判別できる
外部システムから取り込んだデータでは、空白に見える箇所が全角スペースや制御文字であることがよくあります。
数式の結果を元データにする手順
整形が終わったら、数式の列をコピーし、元の列に「値の貼り付け」で戻します。数式のまま元列を消すと、参照先が消えて #REF! になります。

似た関数・機能との使い分け
| 関数・機能 | 対応バージョン | 何を指定するか | 選ぶ場面 |
|---|---|---|---|
| SUBSTITUTE | 2016〜 | 探す文字 | どこにあるか分からない文字を置換する |
| REPLACE | 2016〜 | 位置と文字数 | 「先頭3文字」のように場所が決まっている |
| TRIM | 2016〜 | — | 前後の余分な半角空白を落とす |
| CLEAN | 2016〜 | — | 印刷できない制御文字を落とす |
| 置換ダイアログ(Ctrl+H) | 2016〜 | 探す文字 | 一度きりの一括修正。ワイルドカードも使える |
REPLACEとの分かれ道
2つの違いは指定の仕方だけです。
=SUBSTITUTE(A2, "-", "") … 「-」を探して消す
=REPLACE(A2, 1, 3, "") … 先頭から3文字を消す
探す文字が決まっているならSUBSTITUTE、位置が決まっているならREPLACE。電話番号のハイフン除去は前者、固定長コードの先頭部分の差し替えは後者です。
TRIMでは消えない空白がある
TRIM関数は前後の空白を削除し、単語間の連続した空白を1つにまとめます。ただし対象は半角スペースで、全角スペースは残ります。氏名の姓名間が全角スペースで区切られている表では、TRIMを通しても空白が消えません。完全に除去したいならSUBSTITUTEを使ってください。
置換ダイアログで済む場面
一度直せば終わりなら、Ctrl+Hの置換ダイアログのほうが速く済みます。関数を選ぶ理由は、元データを残したいときと、元データが更新されるたびに整形結果も自動で追従してほしいときです。取り込みシートを毎月上書きする運用なら、数式で組んでおくと作業が消えます。
よくある質問
Q1:複数の文字を一度に置換できますか?
1つの関数では1種類だけです。種類が増えたら =SUBSTITUTE(SUBSTITUTE(A2,"-",""),"(","") のように入れ子にします。入れ子は64レベルまで書けますが、3〜4段を超えると読めなくなるため、置換の対応表を別に作ってVLOOKUP関数で引く形も検討してください。
Q2:「〇〇を含む」文字を消したいのですが、ワイルドカードは使えますか?
使えません。SUBSTITUTEでは * や ? は文字そのものとして扱われます。あいまいな指定で置換したい場合は、置換ダイアログ(Ctrl+H)を使うか、FIND関数・SEARCH関数で位置を求めてREPLACE関数で処理します。
Q3:置換した結果が右寄せになりません。
SUBSTITUTEが返すのは常に文字列だからです。数値として扱いたいときは =VALUE(SUBSTITUTE(...)) で変換するか、末尾に *1 を付けて計算させます。左寄せのままだと、SUM関数の合計にも、VLOOKUP関数の検索値にも一致しません。
Q4:数値のセルに使っても大丈夫ですか?
指定はできますが、結果は文字列になります。また、セルに表示されている「1,200」のカンマが表示形式によるものであれば、SUBSTITUTEが受け取るのはカンマのない 1200 です。表示上の記号は置換の対象になりません。
Q5:置換した文字が何個あったか知りたいのですが。
=LEN(A2)-LEN(SUBSTITUTE(A2,"-","")) で数えられます。置換で消えた分だけ文字数が減る性質を利用した書き方です。検索文字列が2文字以上なら、この差を LEN("検索文字列") で割ってください。
まとめ
- 引数は文字列・検索文字列・置換文字列・置換対象。置換文字列を
""にすれば削除 - 大文字小文字・全角半角は区別される。ワイルドカードは使えない
- 種類が複数なら入れ子。空白は半角と全角の両方を指定する
- 結果は文字列。計算に使うならVALUE関数で数値に戻す
- 位置が決まっているならREPLACE、一度きりの修正なら置換ダイアログ
※関数の対応バージョンはExcelの一般提供時点の情報にもとづいています。お使いの環境や更新プログラムの適用状況により、利用できる関数や表示が異なる場合があります。

