いきなり答える備忘録

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

(Excel)右からn文字目だけ削除する方法

 文字列の右(末尾)から数えてn文字目だけ削除する方法についてです。

右からn文字目だけ削除する方法

 やり方を2つ紹介します。まずはREPLACE関数を使う例です。
 次の画像ではC3セルに数式を入力し、B3セルの文字列のうち右から3文字目(く)を削除しています。

 C3セル

=REPLACE(B3,LEN(B3)-3+1,1,"")

 REPLACE関数は文字列中の指定した位置の文字を置き換えることができます。
 第2引数(開始位置)を「3」、第3引数(置き換える文字数)を「元の文字数-n+1」つまり「LEN(B3)-3+1」、第4引数(置き換え先文字列)を「""」とすることで右から3文字を削除しています。「+1」がないと誤りになりますので注意が必要です。



 次の画像は同様にnとしていくつかの値を指定した結果です。
 nが0なら元の文字列がそのまま、元の文字数より大きいとエラーが返ります。

 D3セル(下方にフィルコピー)

=REPLACE(B3,LEN(B3)-C3+1,1,"")

 


 次に2番目のやり方、LEFT関数とRIGHT関数を使う方法です。
 次の画像ではB3セルの文字列のうち右から3文字目(く)を削除しています。

 C3セル

=LEFT(B3,LEN(B3)-3)&RIGHT(B3,3-1)

 文字列の左側を抽出するLEFT関数と右側を抽出するRIGHT関数で、それぞれ削除する位置より前と後を抽出し、最後に「&」でつなぐという式です。
 方針としてはわかりやすいですが、式にしようとすると意外に面倒で迷いやすいです。



 次の画像は同様にnとしていくつかの値を指定した結果です。
 もちろん実用的にはREPLACE関数の例と変わりませんがnが0のときにエラーになるのが違いです。

 D3セル(下方にフィルコピー)

=LEFT(B3,LEN(B3)-C3)&RIGHT(B3,C3-1)

複数の文字を一括削除する方法

 「○番目」を配列として与え、複数の文字を一括削除する方法についてです。
 複数の作業列を用意して上記の方法を繰り返すのが手っ取り早いですが、ここでは1つの数式で一括削除します。

 C3セル

=REPLACE(REPLACE(B3,LEN(B3)-3+1,1,""),LEN(B3)-5+1,1,"")

 基本的には上記のREPLACE関数を使う方法ですが、式を入れ子(ネスト)にすることで2つの文字を削除しています。
 気を付けなければならないのはREPLACE関数の第2引数で、内側では「○番目」のうち小さい方を指定する必要があります。これは1文字削除するごとに文字の位置が変わっていくことに対応するためです。もちろん3つ以上の字を削除する場合も同様で、昇順(小さい順)に指定する必要があります。



 上記のやり方の場合、消す文字が増えるごとに式が長くなるのが欠点です。
 そこで、「○番目」の配列を与えて一括削除するには次のようにします。

 C3セル

=REDUCE(B3,{3,5,9},LAMBDA(s,a,REPLACE(s,LEN(B3)-a+1,1,"")))

 REDUCE/LAMBDA関数を使っています。文字列をs、番号の配列(上記と同じ理由で昇順にします)をaと名付け、ネストと同様の繰り返し処理を実行しています。

備考:「左から」の場合

 左からn文字目を削除する例については次の記事で紹介しています。

www.officeisyours.com