要点 — どちらの関数もテキストを置き換えますが、答えている問いが違います。
SUBSTITUTE(text, old, new, [instance])は内容で動きます — 「すべての","を何もないものに置換」、あるいは4番目の引数で「2番目だけを置換」。REPLACE(text, start, length, new)は位置で動きます — 「9文字目から 5文字を上書き」、そこに何があろうと関係なく。間違った方を選ぶと、静かに 違うものを変えてしまいます。SUBSTITUTEは大文字小文字を区別し、REPLACEは内容をいっさい見ません。どちらもテキストを返し、すべての Excel バージョンで動作します。
=SUBSTITUTE("1,234,567", ",", "") ' -> "1234567" (すべてのカンマ、内容で)
=SUBSTITUTE("a-b-c", "-", ":", 2) ' -> "a-b:c" (2番目のハイフンだけ)
=REPLACE("2026-XX-01", 6, 2, "04") ' -> "2026-04-01" (位置で)
これらは2つの「検索と置換」の数式であり、技のすべては自分がどちらの考え方の中に いるかを知ることです。それさえ正しければ簡単で、間違えれば、なぜ違う文字が 変わったのかと午後いっぱい悩むことになります。
この記事で学べること
- 中核の分かれ目:
SUBSTITUTEは内容で、REPLACEは位置で一致させる SUBSTITUTEの4番目の引数がどうやってN番目の出現だけを狙うのか- なぜ
SUBSTITUTEは大文字小文字を区別するのか、そしてそれがどう噛みつくのか - 出現回数を数える有名な
LEN引くLENのテクニック - いつ
REPLACEをFINDと組み合わせ、いつ手を止めてTEXTSPLITを使うか
考え方の軸: 言葉の置き換え vs スタンプ
SUBSTITUTE は 意味による検索と置換、Ctrl+H を押すようなものです。「この
テキストを見つけ、現れるところすべてでそれを別のテキストに置き換える。」
一致がどこにあるかは気にせず、それが何であるかだけを気にします。
REPLACE は 座標へのスタンプです。「9文字目から始めて、次の5文字を塗り
つぶし、代わりにこれを書く。」そこに何があったかは気にせず、位置だけを知って
います。変えたいものが予測できる場所にあるなら REPLACE を、どこにあるか
分からない予測できる文字列なら SUBSTITUTE を使います。
' 固定フォーマット -> 位置が信頼できる -> REPLACE
=REPLACE("ID-000123", 1, 3, "REF-") ' "REF-000123"
' 既知のテキスト、未知の場所 -> 内容 -> SUBSTITUTE
=SUBSTITUTE("Qty: 5 units", "units", "pcs") ' "Qty: 5 pcs"
このただ1つの区別が、「どちらを使うの?」という問いのほぼすべてを解決します。
すべてを解き明かす規則: SUBSTITUTE の4番目の引数
既定では SUBSTITUTE はすべての出現を置き換えます — 値からすべてのカンマや
すべての空白を取り除くにはこれが望みどおりです。ですが省略可能な4番目の引数
instance_num を使えば、ちょうど1つだけを狙えます。
=SUBSTITUTE("a-b-c-d", "-", " ") ' "a b c d" — すべて
=SUBSTITUTE("a-b-c-d", "-", " ", 3) ' "a-b-c d" — 3番目のハイフンだけ
これが SUBSTITUTE を実力以上に働かせる機能です。「最後の区切りだけを空白に
変える」「2番目のスラッシュだけを直す」。REPLACE にはできない外科的な精密さです。
REPLACE だと、まず位置を計算させる必要があるからです。
SUBSTITUTE は大文字小文字を区別する(REPLACE は気にしない)
静かな落とし穴: SUBSTITUTE は大文字小文字を正確に一致させます。
SUBSTITUTE("Apple apple", "apple", "orange") は小文字の方だけを変え、
"Apple orange" を返します。これは FIND(同じく
大文字小文字を区別する)と整合しますが、ワークシートの = 比較や SEARCH の
挙動とは逆なので、人を引っかけます。大文字小文字を区別しない置換が必要なら、
フラグはありません — 先に正規化する(例: SUBSTITUTE(UPPER(A2), "APPLE", ...))か、
正確な大文字小文字に合わせなければならないと受け入れるかです。
REPLACE はこれをまるごと回避します。内容をいっさい見ないので、大文字小文字は
無関係です。
知っておく価値のあるテクニック: LEN で出現回数を数える
ここで最も愛される SUBSTITUTE の定石を紹介します。これは置換とはまったく
関係ありません。ある文字が何回現れるかを数えるには、それを取り除いたとき文字列が
どれだけ短くなるかを測ります。
' A2 にカンマはいくつ?
=LEN(A2) - LEN(SUBSTITUTE(A2, ",", ""))
' 単語はいくつ?(シングルスペースの文字列なら、空白の数 + 1)
=LEN(TRIM(A2)) - LEN(SUBSTITUTE(TRIM(A2), " ", "")) + 1
すべてのカンマを取り除き、何文字消えたかを見る — それがカウントです。一度見たら 一生使い回す類の、発想を横にずらしたテクニックです。
REPLACE に FIND が必要なとき、そして手を止めるとき
REPLACE は位置しか知らないので、位置が内容に依存した瞬間に
FIND でそれを計算します。
' メールの @ より前すべてを伏せる(長さ不明)
=REPLACE(A2, 1, FIND("@", A2) - 1, "*****")
これが位置と内容の正当な結婚です。ですが、文字列を再構成するために
SUBSTITUTE に手を伸ばしているなら — 例えば "First,Last,Dept" を列に分割する
など — それはもう手に余っています。SUBSTITUTE を連ねて分割を真似るのは
典型的なアンチパターンです。TEXTSPLIT
(Excel 365)なら1つの数式でそれを行い、しかも動的なまま保たれます。なお、これは
ワークシートの REPLACE/SUBSTITUTE であって、VBA の Replace
ではありません。後者は既定で大文字小文字を区別せず、切り詰める位置引数を持ちます —
ルールが違い、名前が同じです。
判断のポイント
問いはただ1つ: 私は特定のテキストを変えているのか、それとも特定の位置を
変えているのか? 特定のテキストをどこであれ → SUBSTITUTE(4番目の引数を加えれば
1つの出現に限定)。特定の位置 → REPLACE(文字どおり固定でないなら FIND で位置を
計算)。LEN 引く LEN のカウントに手を伸ばしている? それは SUBSTITUTE が
身を立てている瞬間です。レコードを作り直すために SUBSTITUTE を3つ積み上げて
いる? それは代わりに文字列をきちんと分割すべき合図です。
ExcelMaster はどう役立つか
「通貨記号と桁区切りを取り除くが小数点は残す」、あるいは「口座番号を下4桁を
除いて伏せる」 — これらは SUBSTITUTE/REPLACE の仕事で、罠は位置のつもりで
内容を一致させてしまうこと(またはその逆)です。ExcelMaster は平易な日本語で
意図を読み取り、正しい方を書きます — 「2番目だけ」のつもりなら instance_num、
「@ の後」のつもりなら FIND 駆動の位置 — だから違う文字を変えてしまうことが
ありません。置き換えを説明すれば、考え方は選んでくれます。
よくある質問
SUBSTITUTE と REPLACE の違いは何ですか?
SUBSTITUTE は内容でテキストを置き換えます — 文字列を見つけ、現れるところで
(または N 回目だけ)入れ替えます。REPLACE は位置で置き換えます — 内容に
関係なく、指定の場所から始まる決まった文字数を上書きします。既知のテキストには
SUBSTITUTE、既知の位置には REPLACE を使います。
文字の2番目の出現だけを置き換えるには?
SUBSTITUTE の4番目の引数を使います。=SUBSTITUTE(A2, "-", " ", 2) は2番目の
ハイフンだけを変えます。REPLACE は出現で狙うことはできません — 位置でのみ
動きます。
SUBSTITUTE は大文字小文字を区別しますか?
はい。SUBSTITUTE(A2, "apple", "orange") は "Apple" には触れません。大文字小文字に
関係なく置換するには、大文字小文字の区別を無効にするフラグがないため、先に UPPER
か LOWER でテキストを正規化します。
文字がセル内に何回現れるかを数えるには?
置換後の長さを元の長さから引きます。=LEN(A2) - LEN(SUBSTITUTE(A2, ",", "")) は
カンマを数えます。その文字を取り除いて差を測れば、カウントが得られます。
あらかじめ分からない位置のテキストを置き換えるには?
FIND で位置を計算し、それを REPLACE に渡します。
=REPLACE(A2, 1, FIND("@", A2) - 1, "*****") は @ より前すべてを伏せます。これは
REPLACE の位置の考え方と FIND の内容検索を組み合わせたものです。
検証環境
検証環境: Excel 365 (Windows 11) — 最終確認 2026-06-29。
関連ガイド: Excel FIND・SEARCH · Excel LEFT・RIGHT・MID · Excel TEXTSPLIT · VBA Replace
