Excel関数 逆引き集 | 部分文字列を置換 → SUBSTITUTE

Excel
スポンサーリンク

概要

SUBSTITUTEは「文字列の中の特定の部分文字列を、別の文字列に置き換える」関数です。指定語の削除(置換先を空文字””)、特定回だけの置換(n回目のみ)、全角半角の統一、区切りの正規化などに向いています。REPLACEが“位置と長さ”で置換するのに対し、SUBSTITUTEは“一致する語”を対象にします。大文字・小文字は区別されます(区別しない置換は工夫が必要です)。


基本の使い方

書式

=SUBSTITUTE(文字列, 置換前, 置換後, [置換する回数])
  • 置換する回数を省略すると、該当箇所をすべて置換します。
  • 置換する回数を指定すると「その回目」だけ置換します(1始まり)。

=SUBSTITUTE("AB-123-456", "-", "")     // "AB123456"(全ハイフン削除)
=SUBSTITUTE("山田 太郎", " ", " ")    // 全角スペース → 半角スペース
=SUBSTITUTE("code-code-code", "code", "ID", 2)  // 2回目だけ "ID" に

具体例

区切り文字の正規化(全角→半角、重複の整理)

=SUBSTITUTE(SUBSTITUTE(A2, " ", " "), "  ", " ")

全角スペースを半角にし、連続した2スペースを1スペースにまとめます。

ハイフン・スラッシュなどの記号を削除

=SUBSTITUTE(SUBSTITUTE(A2, "-", ""), "/", "")

複数の記号をまとめて取り除き、数値やIDをクリーンにします。

接頭辞・接尾辞だけ置換(n回目指定)

「code-code-code」の2回目だけを別語に置換:

=SUBSTITUTE(A2, "code", "ID", 2)

日付・数値を文字化して一部置換

=SUBSTITUTE(TEXT(A2, "yyyy/mm/dd"), "/", "-")

見た目の形式を整えたい場合は、TEXTで文字列化してから置換します。


応用テンプレート

最後の出現箇所だけを置換

最後の「-」だけを「/」に変える(出現回数を計算して指定):

=SUBSTITUTE(A2, "-", "/", (LEN(A2)-LEN(SUBSTITUTE(A2, "-", ""))))

1文字の置換前の場合、差分文字数がその出現回数になります。

複数種の区切りを一気に統一(ネスト)

「,」「;」「|」をすべてタブに統一:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, ",", CHAR(9)), ";", CHAR(9)), "|", CHAR(9))

先頭や末尾の特定語だけ除去(n回目+パターン)

先頭の「ID:」を消す(1回目のみ):

=SUBSTITUTE(A2, "ID:", "", 1)

末尾の「.」を1回だけ消す(最後の出現を計算):

=SUBSTITUTE(A2, ".", "", (LEN(A2)-LEN(SUBSTITUTE(A2, ".", ""))))

大文字小文字を区別せずに“削除”したいときの簡易策

大文字小文字を無視すると他部分の大小も変わるため厳密には難しいですが、“完全削除”ならLOWERで両方小文字に寄せ、比較語も小文字にして置換(削除)できます:

=SUBSTITUTE(LOWER(A2), LOWER("ABC"), "")

元の大小を維持したままの“置換”は、FIND/SEARCHとREPLACEの併用が必要です。

不可視文字・改行を削除(CLEAN/CHAR)

改行(LF)を消す:

=SUBSTITUTE(A2, CHAR(10), "")

制御文字ごと消すなら:

=CLEAN(A2)

よくあるつまずきと対策

大文字・小文字を区別する

「A」と「a」は別文字です。区別しない検索・切り出しならSEARCH、置換ならLOWER/UPPERで寄せるか、REPLACE+SEARCHで位置指定の置換を検討。

置換前が複数回現れると全部置換される

“1箇所だけ”を狙うなら第4引数(置換する回数)を使います。最後だけは「出現回数」を計算して指定します。

置換前が見つからないとそのまま返る

SUBSTITUTEは一致がなければ元の文字列を返します。IFERRORは不要です(FIND/SEARCHとは違います)。

複数語をまとめて置換すると式が長い

ネストは読みづらくなります。列ごとに段階を分ける、LET関数で中間結果に名前を付けると保守性が上がります(Microsoft 365)。

=LET(t, SUBSTITUTE(A2, " ", " "), SUBSTITUTE(t, "  ", " "))

バイト数ベースが必要なとき

旧来のDBCS設定ではSUBSTITUTEBが存在しますが、現行は文字ベース(SUBSTITUTE)を推奨します。


例題

問題1: A2の文字列からすべてのハイフンを削除し、B2に表示してください。

解答例:

=SUBSTITUTE(A2, "-", "")

問題2: C2の文字列に含まれる全角スペースを半角スペースに置き換えてD2に表示してください。

解答例:

=SUBSTITUTE(C2, " ", " ")

問題3: 「code-code-code」がE2にあります。2回目の「code」だけ「ID」に置き換えてF2に表示してください。

解答例:

=SUBSTITUTE(E2, "code", "ID", 2)

問題4: G2の文字列で、最後の「.」だけを削除してH2に表示してください。

解答例:

=SUBSTITUTE(G2, ".", "", (LEN(G2)-LEN(SUBSTITUTE(G2, ".", ""))))

問題5: I2のテキストから「,」「;」「|」をすべてタブ(改行ではなくタブ)に統一してJ2に表示してください。

解答例:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(I2, ",", CHAR(9)), ";", CHAR(9)), "|", CHAR(9))

まとめ

SUBSTITUTEは「一致する語を文字ベースで置換」する定番関数です。全部置換(第4引数省略)と“n回目だけ”置換を使い分け、最後の出現はLEN差で回数を求めるのがコツ。区切り正規化、記号削除、全角半角統一、タブ・改行の整理まで、テキスト前処理の主力になります。講師として強調したいのは「REPLACEは“位置指定”、SUBSTITUTEは“語指定”」。目的に合わせて選べば、文字列処理の設計が迷いません。

タイトルとURLをコピーしました