いきなり答える備忘録

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

(Excel)TEXTSPLIT関数で分割した最後の項目を取得する

 Excelの新関数であるTEXTSPLIT関数を使うことで、文字列を区切り文字に基づいて分割することができます。
 これにより分割した項目のうち最後の項目を取得する方法についてです。

  • 「CHOOSECOLS(TEXTSPLIT(文字列,区切り文字),-1)」という式により、分割した文字列のうち最後のものだけを取得することができます。

手順

 B列にカンマで区切られたいくつかの文字列が入力されています。
 これに対しC3セルに次のような式を入力し、B3セルの最後のカンマより後の部分を取得しています。

 C3セル

=CHOOSECOLS(TEXTSPLIT(B3,","),-1)

 TEXTSPLIT関数によりカンマを区切り文字として文字列を分割し、「CHOOSECOLS(~,-1)」とすることで分割した結果のうち最後のものを取得しています。
 配列のうち〇番目のものを求める関数としてINDEX関数がありますが、「最後のもの」という指定はできません。しかしCHOOSECOLSではマイナスの数値を用いることで「最後から〇番目」という指定が可能になっています。「-2」とすれば最後から2番目が取得できます。


 さらに式を下方にコピーした結果です。B6セルのように区切り文字(カンマ)がない場合は文字列がそのまま返ります。

 ここで注意ですが、スピルを利用しようとして「=CHOOSECOLS(TEXTSPLIT(B3:B6,","),-1)」とすると全く異なる結果になります。
 なぜかというとTEXTSPLIT関数の第1引数に配列を与えるとそれぞれの最初の項目しか返ってこないからで、C3セルの値は「ABC」、C4セルの値は「いか」……という結果になります(LAMBDA/BYROWなどを併用してもダメ)。Googleスプレッドシート(SPLIT関数)と比較してここが残念な仕様に思われます。

TEXTAFTER関数との比較

 そもそもですが、TEXTAFTER関数を使って第3引数を-1(該当する最後の文字より後の部分を取得)にすれば同じようなことができます。
 TEXTAFTER関数の場合は第1引数に配列を与えた場合でもきちんとスピルした結果になるので、画像のように1つの式ですべての結果が得られるのがメリットです。
 一方で区切り文字が存在しない場合(B6セルの例)はエラーが返りますのでそこが注意点です。

 C3セル

=TEXTAFTER(B3:B6,",",-1)

 C6セルをエラーにしたくない場合は「=TEXTAFTER(B3:B6,",",-1,,,B3:B6)」としたり(第6引数=区切り文字がないときの戻り値として元のセルの値を設定する)、「=TEXTAFTER(","&B3:B6,",",-1)」とする(区切り文字を先頭にくっつけておく)方法が考えられます。