いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)文字列の右側(末尾)の空白だけ削除する

 Excelで、文字列の末尾にあるスペース(全角半角は混在可)だけを削除する方法についてです。ワークシート関数にはRTRIM関数がなく厄介ですが、他の関数を代用して実現してみます。

  • SEQUENCE関数等を組み合わせて使用することで、文字列の末尾のスペースだけを削除できます。
  • TEXTBEFORE関数を使った、より短い式でできる方法もあります。

手順

SEQUENCE/FILTER関数等を使う方法

 画像のB3:B5の文字列は、随所にスペースを含んでいます。また、B3とB4の文字列の末尾には複数のスペースが並んでいて、さらに全角スペースと半角スペースが混在しています。
 C3セルに次の式を入力して下方にコピーすることで、各文字列の末尾にあるスペースだけを削除し、その他のスペースはそのまま残しています。B5の末尾にスペースはないので、削除後も何も変わっていません。


 C3セル

=LET(x,SEQUENCE(LEN(B3)),y,FILTER(x,TRIM(MID(B3,x,1))<>""),LEFT(B3,MAX(y)))

 LET関数を使って短縮を図っていますがかなり長い式となっています。
 まず「x,SEQUENCE(LEN(B3))」の部分により「1から『文字列の長さ』までの整数の集まり」にxという名前を付けています。例として対象の文字列が「あ い う 」の6文字(スペース込み)であればxは{1;2;3;4;5;6}となります。
 次に「y,FILTER(x,TRIM(MID(B3,x,1))<>"")」の部分により、xのうち「文字列中のその位置(〇番目の文字)がスペースでないような数字」を抽出しています。対象の文字列が「あ い う 」であればyは{1;3;5}となります。
 最終的にyのうち最大のものの位置(つまりスペースでないもののうち最後の位置)までを取得すればよいことになりますので、LEFT関数で抽出しています。
 なお、空白セルや空文字列に対してはエラーが返ります。

TEXTBEFORE関数を使う方法

 比較的新しい関数であるTEXTBEFORE関数を使う方法です。
 式をだいぶ短くまとめられます。

 C3セル

=LET(x,RIGHT(TRIM(B3)),TEXTBEFORE(B3,x,-1)&x)

 「RIGHT(TRIM(B3))」により、いったん文字列にTRIM関数を適用した場合の最後の1文字(スペース以外の最後の文字)を抽出します(ここでは「県」)。そしてこれにLET関数でxと名付けます。
 あとはTEXTBEFORE関数を使い、元の文字列のうち最後のxより前の文字列を抽出します(第3引数=-1としているのに注意)。ただしこのとき最後のxが消えてしまいますので、&xで補って完成です。
 TRIM関数を使っているのはxを求めるためだけなので、末尾以外の空白は消えません。
 なお、空白セルに対しては空文字列が返され、スペースだけからなる文字列はそのまま返ってきます。さして重要でもなさそうなのでここでは深追いしませんが、ご注意ください。

類似するその他の空白削除の例について

 なお、先頭のスペースのみ削除する例、先頭と末尾のスペースのみ削除する例は次の記事で紹介しています。

www.officeisyours.com

www.officeisyours.com