エクセルで特定の文字を消す関数の基本
まずは、エクセルで特定の文字を消す関数の基本について解説していきますね。普段の業務で「この記号だけサクッと消したいな」と感じる場面は多いはず。ここでは、基本中の基本となる関数と、実務で役立つちょっとしたテクニックをご紹介します。

SUBSTITUTE関数で文字を置換
エクセルで特定の文字を消す関数といえば、真っ先に名前が挙がるのがSUBSTITUTE(サブスティテュート)関数です。この関数は、指定した「特定の文字」を検索して、別の文字に置き換える(置換する)働きを持っています。文字を「消す」という機能があるわけではないのですが、「置換後の文字」を「””(空文字)」に指定することで、結果的に文字を消去できるという仕組みですね。
SUBSTITUTE関数の基本構文
=SUBSTITUTE(文字列, 検索文字列, 置換文字列, [置換対象])
例えば、A1セルに入っている「1,250円」というテキストから「円」という文字だけを消したい場合、数式は=SUBSTITUTE(A1, "円", "")となります。とても直感的で使いやすいですよね。
ただし、ここで一つ大きな注意点があります。それは、SUBSTITUTE関数が「大文字・小文字」や「全角・半角」を厳密に区別するということです。「Excel」と「EXCEL」、あるいは全角の「A」と半角の「A」は全く別の文字として扱われます。
もしデータに表記ゆれがある場合は、事前にASC関数を使って全て半角に揃えたり、UPPER関数で大文字に統一したりと、前処理を挟むことで確実性がぐっと上がりますよ。
また、「株式会社」と「(株)」の両方を一気に消したい場合は、=SUBSTITUTE(SUBSTITUTE(A1, "株式会社", ""), "(株)", "")のように、関数の中に関数を入れる「ネスト」という構造にする必要があります。3つ、4つと増えると数式が長くなって見づらくなるので、過度なネストには気をつけてくださいね。
REPLACE関数で位置を指定し削除
特定の文字そのものではなく、「ここから何文字分を消したい」と位置を指定して文字を消すのがREPLACE(リプレイス)関数です。SUBSTITUTE関数が「内容」をキーにするのに対し、REPLACE関数は「座標」をキーにするという違いがあります。
REPLACE関数の基本構文
=REPLACE(元の文字列, 開始位置, 文字数, 置換文字列)
例えば、商品コード「A-1234」の先頭から2文字目にある「-(ハイフン)」を確実に消したい場合、数式は=REPLACE(A1, 2, 1, "")と書きます。指定した文字数分を「””(空文字)」に置き換えることで、文字を削除するわけですね。
この関数が特に活躍するのは、社員番号やシステムIDのように「必ず〇桁目に不要な文字が入っている」というフォーマットがカッチリ決まったデータを処理する時です。対象の文字が何であれ、指定した場所の文字を無条件で消してくれるので、非常に安定した処理が可能です。
特定の文字以降を消す抽出テクニック
実務でよくあるのが、「特定の記号自体」を消すのではなく、「特定の記号を境界線にして、それより前(または後ろ)を全部消したい」というケースです。例えば、メールアドレスの「@」より後ろのドメイン部分を消したい、といった場面ですね。
昔からよく使われているのは、FIND関数(文字の位置を探す)と、LEFT関数(左から文字を取り出す)を組み合わせる方法です。メールアドレスの「@」以降を消す(@より前を残す)なら、=LEFT(A1, FIND("@", A1) - 1)という数式になります。少しパズルみたいで面白いですよね。
最新の関数ならもっと簡単!
最近のMicrosoft 365環境であれば、TEXTBEFORE関数とTEXTAFTER関数という、とても便利な関数が追加されています。
例えば、=TEXTBEFORE(A1, "@")と書くだけで、「@」より前の文字をスッと取り出し、後ろを消してくれます。複数の区切り文字がある場合も引数で細かく指定できるので、使える環境の方はぜひ試してみてください。
ワイルドカードが使えない理由と対策
エクセルの「検索と置換(Ctrl + H)」機能では、任意の文字を表す「*(アスタリスク)」などのワイルドカードが使えて便利ですよね。例えば「(*)」と指定すれば、括弧と中身を丸ごと消すことができます。
では、SUBSTITUTE関数でも同じことができるかというと…実はSUBSTITUTE関数はワイルドカードに対応していません。「*」を指定しても、「何らかの文字」ではなく、純粋に「アスタリスクという記号そのもの」を探しに行ってしまいます。これは関数の仕様なので仕方がない部分ですね。
関数ベースでどうしてもワイルドカードのような処理をしたい場合は、少し遠回りになりますが、ワイルドカードが使えるSEARCH関数で消したいパターンの開始位置を見つけ、そこからREPLACE関数を使って置き換える、という組み合わせのテクニックが必要になってきます。
ちなみに、通常の「検索と置換」機能を使う際、データの中に本当にアスタリスク(*)が含まれていて、それ自体を消したい場合は、検索窓に「~*(チルダとアスタリスク)」と入力する「エスケープ処理」が必要です。これでエクセルがワイルドカードではなく記号として認識してくれますよ。
削除後のエラーの原因と対処法を解説
特定の文字をきれいに消すことができて一安心!…と思いきや、「SUM関数で合計できない」「掛け算したら#VALUE!エラーになる」といったトラブルに直面することがよくあります。私も最初はこれでかなり悩みました。
原因はとてもシンプルで、SUBSTITUTE関数などで文字を消した結果は、見た目が数字でもエクセル内部では「文字列(テキスト)」として扱われているからです。エクセルからすると「文字で計算しようとしている!」と判定してエラーを出してしまうんですね。
エラーを回避する数値化テクニック
計算に使いたい場合は、文字を消した数式全体をVALUE関数で包み込んで、強制的に数値データに変換してあげましょう。
例:=VALUE(SUBSTITUTE(A1, "円", ""))
プロっぽい裏技として、数式の先頭に「–(マイナスを2つ)」付ける方法もあります(=--SUBSTITUTE(A1, "円", ""))。これも文字列を数値に変換する効果がありますよ。
なお、マイナスの数値で計算結果がおかしくなる場合や、その他のエラーについては、元のデータに不要なスペースが残っていないかなどをよく確認してみてください。
エクセルで特定の文字を消す関数の応用

ここからは、一歩踏み込んだ応用の解説になります。システムから出力された複雑なデータを扱う場合、基本の関数だけでは対応しきれないことも出てきます。そんな時に役立つ、少し高度なテクニックを見ていきましょう。
正規表現を用いた高度なパターン削除
データの中の「数字だけを全部消したい」「アルファベットだけを消したい」といった複雑な条件になると、今までの関数ではかなり厳しい戦いになります。
そこで救世主となるのが、Microsoft 365などで使えるようになったREGEXREPLACE(レジェックスリプレイス)関数です。この関数を使うと、「正規表現」というプログラミングで使われる強力なパターンマッチングがエクセル内で使えるようになります。
| やりたいこと | REGEXREPLACE関数の例 |
|---|---|
| すべての数字を削除 | =REGEXREPLACE(A1, "\d", "") |
| 数字以外を削除(数字のみ抽出) | =REGEXREPLACE(A1, "\D", "") |
| 英字(アルファベット)のみ削除 | =REGEXREPLACE(A1, "[A-Za-z]", "") |
例えば、電話番号からハイフンや不要な文字列(「内線」など)を一括で消して数字だけを残したい場合、=REGEXREPLACE(A1, "\D", "")と書くだけで一発で解決します。今までマクロ(VBA)を使わないと難しかった処理が、関数ひとつでできるようになったのは本当に画期的なことですね。
特有のスペース等見えない文字の削除
他のシステムから書き出したデータや、Webサイトからコピペしたデータをエクセルに貼り付けた時、「TRIM関数で空白を消したはずなのに、なぜかスペースが残る…」という怪奇現象に遭遇したことはありませんか?
これは、通常の半角スペースとは違う「ノーブレークスペース(CHAR(160))」という見えない特殊な空白が混入している可能性が非常に高いです。この文字は、エクセル標準の空白を消す関数(TRIM関数)では絶対に消すことができません。
この厄介な見えない文字を消すには、まずSUBSTITUTE関数を使って、CHAR(160)を普通の半角スペース(または空文字)に置き換えてから、TRIM関数を使うという二段構えの手順が必要になります。
=TRIM(SUBSTITUTE(A1, CHAR(160), " "))
実務で「どうしても空白が消えない!」と行き詰まったら、ぜひこの数式を試してみてください。大抵の場合はこれでスッキリ解決するはずです。
CLEAN関数で不要な制御文字を一掃
見えない文字の仲間として、改行コードやタブ文字といった「制御文字」がデータに紛れ込んでいることもよくあります。これらが残っていると、関数が正しく動かなかったり、レイアウトが崩れたりする原因になります。
セルの中の意図しない改行コード(WindowsならCHAR(10))などを手っ取り早く一掃したい時に役立つのが、CLEAN(クリーン)関数です。
=CLEAN(A1)と入力するだけで、印刷できない不要なシステム制御文字をまとめて消し去って、プレーンな文字だけの状態にしてくれます。とても便利な関数ですね。
ただし注意点として、CLEAN関数は「自分で意図して入れたセル内改行(Alt + Enter)」も一緒に消してしまうという特徴があります。エクセルでセル内のテキストを任意の位置で2行にする改行のショートカット等で整えたレイアウトを残しつつ、特定の改行だけを消したい場合は、SUBSTITUTE関数で文字コード(CHAR(10)など)を直接指定して消す方が確実かなと思います。
自動化ならPower Queryとの使い分け
数千行、数万行といった大量のデータを扱ったり、毎日のように同じクレンジング作業を繰り返すようなフェーズに入ってきたら、関数の組み合わせを考えるより、エクセルに標準搭載されている「Power Query(パワークエリ)」機能へのステップアップをおすすめします。
Power Queryの画面(エディター)を使えば、対象の列を右クリックして「値の置換」を選ぶだけで、不要な文字の一括削除が直感的な画面操作で完了します。
さらにすごいのは、「文字を消す」という手順をシステムが記憶してくれることです。次回から新しいデータを読み込ませるだけで、自動的に同じ文字削除の処理を実行してくれます。毎日のルーチンワークが劇的に楽になりますよ。
Power Queryでのデータ整理の順番
いきなり文字を置換するのではなく、まずは「Trim(前後の空白削除)」や「Clean(制御文字の削除)」を行って、見えない文字を綺麗にしてから置換作業に入るのが、エラーを防ぐ黄金の手順です。
エクセルで特定の文字を消す関数まとめ
いかがでしたでしょうか。エクセルで特定の文字を消す関数に関する基本から、見えない文字の処理、そして最新の正規表現を使った高度な削除テクニックまでをご紹介しました。
一口に「文字を消す」と言っても、状況によって最適な方法は様々です。数件の修正なら手作業や「検索と置換」で十分ですし、定型業務なら今回ご紹介した「SUBSTITUTE関数」や「REPLACE関数」、そして「Power Query」が強力な味方になってくれます。
エラーでつまずいた時は、この記事の「見えない文字」や「数値化」の項目を思い出して、落ち着いて対処してみてくださいね。
※本記事で紹介した関数の動作は、エクセルのバージョン(特にMicrosoft 365の最新機能など)によって異なる場合があります。また、データ処理の際は必ず元データのバックアップを取ってから作業を行うようにしてください。複雑なシステムデータ等を扱う場合の最終的な判断は、社内のシステム管理者等の専門家にご相談されることをお勧めします。
