いきなり答える備忘録

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

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

 Excelで、テキストのうち左(先頭)から数えてn文字目だけを消す方法についてです。

  • REPLACE関数を使って左からn文字目だけを削除することができます。

左からn文字目を削除する方法

 次の画像ではC3セルに数式を入力し、B3セルの文字列のうち左から3文字目(う)を削除した結果を取得しています。

 C3セル

=REPLACE(B3,3,1,"")

 REPLACE関数は文字列中の指定した位置の文字を置き換える関数です。
 第2引数(開始位置)を「3」、第3引数(置き換える文字数)を「1」、第4引数(置き換え先文字列)を「""」とすることで左から3文字を削除しています。



 次の画像はnとしていくつかの値を指定た結果です。
 nが0のときはエラーとなり、元の文字数(10)以上の場合は元の文字列がそのまま返ります。

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

=REPLACE(B3,C3,1,"")

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

 複数の文字(○番目)を指定して一括削除する方法についてです。
 次の画像では文字列中の左から3番目と5番目の文字(う、お)を削除しています。

 C3セル

=REPLACE(REPLACE(B3,5,1,""),3,1,"")

 基本的には最初の例と同じですが、入れ子(ネスト)を利用して2つの文字を削除しています。
 ただし内側のREPLACE関数の第2引数(開始位置)を大きい番号の「5」、外側の第2引数を「3」とし、大きい順に指定する必要があります。逆に指定すると最初の文字を消したときに後の文字の位置が1つ前に移動してしまうのでおかしな結果になります。
 手っ取り早く列を複数用意して段階的に削除してもいいですが、やはりこの点に気を付ける必要があります。
 


 また、このやり方(入れ子)だと指定する文字が増えるにつれ式がどんどん長くなるのが難点です。
 「○番目」の配列を与えて一括削除するには次のようにします。

 C3セル

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

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



 配列を昇順で与えたい場合は次のようになります。ただし1つ上の式のままREDUCE関数の第2引数にSORT関数を重ねて降順に直す方が簡単です。

 C3セル

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

備考:「右から」の場合

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

www.officeisyours.com