いきなり答える備忘録

Google Workspace(旧G Suite)・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)カンマ区切り文字列からn番目の項目を求める

 Excelで、カンマで区切られた文字列のうち指定した位置の項目を求める方法についてです。他の区切り文字であっても同じようにできます。
 また、後ろから数えることも可能です。

  • TEXTSPLIT関数とINDEX関数を組み合わせて、カンマ区切り文字列のn番目の項目を求められます。
  • INDEX関数の代わりにCHOOSECOLS関数を使えば、後ろからn番目を求めることもできます。

手順

TEXTSPLIT/INDEX関数を使う方法

 B3:B6の範囲に4つのカンマ区切り文字列が記録されています。
 そこでC3セルにINDEX関数を使った次の式を入力し、下方にコピーしています(以下の例でも同様)。
 それぞれのカンマ区切り文字列の2番目の項目を取得しているのがわかります。

 C3セル

=INDEX(TEXTSPLIT(B3,","),2)

 「TEXTSPLIT(B3,",")」の部分で文字列をカンマで区切り、「INDEX(~,2)」とすることでその2番目の項目を取得しています。
 最後の例(B6→C6セル)でわかるように、その箇所に文字がない場合は空文字列となります。これはカンマが連続するケースのほか、文字列の先頭や末尾がカンマである場合にも発生します。
 カンマ区切り文字列の場合、「〇番目のカンマの前(後)は~の意味」といった意味付けがされている場合が多いので、たいていはこのように用いるかと思いますが、このような空の項目を飛ばして数えることもできます。この記事の後の節で方法を紹介します。

TEXTSPLIT/CHOOSECOLS関数を使う方法

 こちらは新しいCHOOSECOLS関数を使う方法です。
 対象となる文字列も結果も、INDEX関数の例と全く同じです。

 C3セル

=CHOOSECOLS(TEXTSPLIT(B3,","),2)

 内容的にINDEX関数と同様です。関数名が長いのでINDEXの方が好まれるかもしれません。

後ろからn番目を求める

 CHOOSECOLS関数を用いるメリットとして、第2引数をマイナスの値にすることで後ろからn番目を取得できることが挙げられます。
 ここでは第2引数を「-1」とすることで、カンマ区切り文字列の最後の項目を取得しています。

 C3セル

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

 同様に「-2」とすれば最後から2番目、「-3」とすれば最後から3番目……となります。

連続するカンマや先頭・末尾のカンマを無視して数える場合

 最初の例でみたように、n番目の項目として何も文字がない場合には結果が空白セルとなりますが、ここではそのような項目を飛ばして数えるようにしています(B3→C3セルの例)。

 C3セル

=INDEX(TEXTSPLIT(B3,",",,TRUE),2)

 TEXTSPLIT関数の第4引数(空白を無視)を「TRUE」とすることで、文字列を区切る際に空白セルを生じさせないようにしています。
 ここではINDEX関数を使っていますが、もちろんCHOOSECOLS関数を使う場合でも同様の結果になります。