(Excel)特定の文字を削除する方法

 Excelで、文字列中の特定の文字(文字列)を削除する、つまり消す方法についてです。
 関数による方法とメニューを使う方法を紹介します。

SUBSTITUTE関数を使う方法

 次の画像では、C3セルに次の数式を入力して、B3セルの文字列から「ドイツ」の字を削除した結果を得ています。
 2つある「ドイツ」がいずれも消えていることが確認できます。

 C3セル

=SUBSTITUTE(B3,"ドイツ","")

 文字列の置換を行うSUBSTITUTE関数を使い、第3引数(置換先)を空文字列(長さ0の文字列)とすることで、第2引数(置換元)の文字列が結果的に削除されることとなります。
 置換元の文字列が2つ以上含まれている場合でもすべて削除されます。第4引数として数値(n)を指定すればn番目のものだけ削除されますが実例は省略します。



 基本的に複数種類の文字列を一括して削除することはできませんが、SUBSTITUTE関数をネスト(入れ子)すれば可能です。
 次の画像では「ドイツ」と「インド」の文字列を削除しています。

 C3セル

=SUBSTITUTE(SUBSTITUTE(B3,"ドイツ",""),"インド","")

 内側のSUBSTITUTE関数で「ドイツ」を削除した結果を外側のSUBSTITUTE関数の第1引数(対象テキスト)としています。
 古いバージョンのExcelでも実現できるのがメリットですが削除する文字列の種類が増えると式が長くなるのが欠点です。



 なお、REDUCE/LAMBDA関数を併用することでSUBSTITUTE関数をネストさせることなく一括削除できます。
 次の画像では1つ上の画像と同様に「ドイツ」と「インド」の文字列を削除しています。

 C3セル

=REDUCE(B3,{"インド","ドイツ"},LAMBDA(x,y,SUBSTITUTE(x,y,"")))

 B3セルの値をx、「インド」と「ドイツ」からなる配列をyと名付け、xからy(の1つ1つ)を順次削除した最後の結果を得ています。
 配列の要素を増やすだけで削除する文字列の種類を増やせますが基本的に難しいので、REDUCE/LAMBDA関数が使えるバージョンなら次の方法を採用した方が簡単です。

TEXTSPLIT関数を使う方法

 文字列の分割を行うTEXTSPLIT関数を使う方法です。
 次の画像では、C3セルに次の数式を入力して、B3セルの文字列から「ドイツ」の字を削除した結果を得ています。

 C3セル

=CONCAT(TEXTSPLIT(B3,"ドイツ"))

 TEXTSPLIT関数により「ドイツ」を区切り文字としてB3セルの文字列を分割しています。具体的には(1)空文字列、(2)「日本インド」、(3)「イタリア」の3つの値からなる配列が得られます。
 それらをCONCAT関数で連結することで、結果的に「ドイツ」を削除した結果を得ています。



 次の画像では「ドイツ」と「インド」の文字列を削除しています。

 C3セル

=CONCAT(TEXTSPLIT(B3,{"ドイツ","インド"}))

 TEXTSPLIT関数の区切り文字をこのように配列として指定することで複数の区切り文字を指定できるので、結果的にそれらの文字(列)が削除されます。
 SUBSTITUTE関数を使う方法では第2引数をこのように指定してもうまくいきません。


 注意点として、このTEXTSPLIT関数を使う方法では、対象範囲を「B3:B5」のように拡張してスピルさせようとしても1つの文字列しか得られず、その1つの文字列もおかしなものになります。よって複数のセルを対象とする場合は式をフィルコピーしなければなりません。
 これはそもそもTEXTSPLIT関数が適切にスピルしない仕様であることと、CONCAT関数が対象範囲のすべての文字列を結合してしまうことが原因です。

REGEXREPLACE関数を使う方法

 REGEXREPLACE関数はSUBSTITUTE関数と同様に文字列の置換を行う関数ですがMicrosoft 365バージョンでのみ使える関数です(2025年1月現在)ので注意してください。

 次の画像では、B3セルの文字列から「ドイツ」の字を削除した結果を得ています。

 C3セル

=REGEXREPLACE(B3,"ドイツ","")

 REGEXREPLACE関数の基本的な構文はSUBSTITUTE関数と同様で、第3引数(置換先)を空文字列(長さ0の文字列)とすることにより第2引数(置換元)の文字列が結果的に削除されます。



 REGEXREPLACE関数のメリットは正規表現(ワイルドカードの拡大版のようなもの)が使えることで、正規表現にマッチする部分を置き換えることができます。
 次の画像では正規表現を利用して「ドイツ」と「インド」の文字列を削除しています。

 C3セル

=REGEXREPLACE(B3,"ドイツ|インド","")

 文字列を「|」で区切ることで複数の置換元(つまり削除対象)を指定できます。



 次の画像では「ド」「イ」「ツ」の3種の文字を一括削除しています。

 C3セル

=REGEXREPLACE(B3,"[ドイツ]","")

 文字列を「[]」で囲むことで、内側の文字の1つ1つを置換元(削除対象)に指定できます。



 第4引数として数値(n)を指定することで指定した置換元文字列のうちn番目のものだけを置換(削除)できます。
 次の画像では「A」の字のうち最初のものだけを削除しています。

 C3セル(C5セルまでフィルコピー)

=REGEXREPLACE(B3,"A","",1)

 この第4引数の機能はSUBSTITUTE関数にもあるのでSUBSTITUTE関数でも同じことができます。



 ただしREGEXREPLACE関数独自の機能として、マイナスの数値を指定することで「後ろから数えてn番目」のものだけ置換(削除)できます。
 次の画像では「A」の字のうち最後にあるものを削除しています。

 C3セル(C5セルまでフィルコピー)

=REGEXREPLACE(B3,"A","",-1)

 
 SUBSTITUTE関数の場合はマイナスの値の指定は無効です(エラーになる)。



 次の画像では文字列の先頭にある「A」だけを削除しています。
 B3セルの文字列は先頭が「A」なので削除されていますが、B4,B5セルの文字列は先頭が「A」ではないので何も削除されず変わりません。

 C3セル(C5セルまでフィルコピー)

=REGEXREPLACE(B3,"^A","")

 正規表現では「^」は文字列の先頭を意味しますので、「^A」は「文字列の先頭にある『A』」という意味になります。
 上で紹介した「『A』のうち最初のものを削除する」例との違いに注意してください。



 次の画像では文字列の末尾にある「A」だけを削除しています。
 B4セルの文字列は末尾が「A」なので削除されていますが、B3,B5セルの文字列は末尾が「A」ではないので何も削除されず変わりません。

 C3セル(C5セルまでフィルコピー)

=REGEXREPLACE(B3,"A$","")

 正規表現で「$」は文字列の末尾を意味しますので、「A$」は「文字列の末尾にある『A』」という意味になります。

「検索と置換」メニューを使う方法

 ここではB3:B5の範囲のセルから「A」の字だけを削除するものとします。
 まず対象となるB3:B5の範囲を選択してショートカットキー「Ctrl+H」を押し(CtrlとHの同時押し)、「検索と置換」ダイアログを出現させます。

 「Ctr+F」でも同じダイアログが開けますが、「Ctr+H」だと「置換」タブを選択した状態で開けるのがポイントです。また、「ホーム」タブから「検索と選択」→「置換」と進む方法もあるものの、メニューがややわかりにくい位置にあるのでキーを覚えた方が楽です。



 ダイアログ中の「検索する文字列」に「A」と入力して「すべて置換」ボタンをクリックします。

 

 すると「A」の字がすべて削除されました。
 「置換後の文字列」に何も指定しないことで結果的に「A」が削除されるというわけです。

 ただしこの方法の場合、関数の例で見たような削除対象の細かい指定はできません。