いきなり答える備忘録

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

(Excel)TEXTSPLIT関数の使い方

 Excelで長らく待望された末に導入されたTEXTSPLIT関数の基本的な使い方についてです。
 注意点や若干の応用についても併せて紹介します。

  • TEXTSPLIT関数を使って、文字列をその文字列中の区切りの文字(カンマ、コロンなど。2文字以上可)に基づき分割することができます。

機能と構文

 TEXTSPLIT関数の基本的な機能は「列区切りや行区切りの文字(2文字以上可)によりテキストを分割し、複数のセルに出力する」というものです。
 構文は次のとおりで、最大6つの引数を指定できます。

=TEXTSPLIT(テキスト, 列区切り[, 行区切り, 空白を無視, 大・小文字の区別, パディング])

第4引数の設定値
効果
FALSEテキストの先頭・末尾の区切りや連続する区切りに対する空のセル(空文字列)を表示しない(既定値)
TRUEテキストの先頭・末尾の区切りや連続する区切りに対する空のセル(空文字列)を表示する

第5引数の設定値
効果
0区切りの大文字と小文字を区別する(既定値)
1区切りの大文字と小文字を区別しない

 第2引数(列区切り)まで必須とされていますが、第2引数に何も指定しない場合は「=TEXTSPLIT(テキスト,,行区切り)」のように記します。
 以下では第3引数までを使った単純な使用例と、第4~6引数の設定例、さらに応用例等を紹介します。

基本的な使用例

 B列に対象となるテキスト(文字列)が記入されています。
 D3セルに次の式を入力し、テキスト中の「☆」を列区切りとして分割し、横並びに表示しています。
 区切りの「☆」はすべて取り除かれ、どこのセルにも現れません。

 D3セル

=TEXTSPLIT(B3,"☆")

 第2引数(列区切り)として「☆」を指定しています。
 実際の使用例ではカンマ(,)やセミコロン(;)で区切る例が多いと思いますが、見やすさのため以下では主にこの記号を使っていきます。



 区切りとして2文字以上の文字列を指定することもできます。

 D3セル

=TEXTSPLIT(B3,"AND")

 基本的に大文字と小文字は区別されます。ただし第5引数の設定により、大文字と小文字の区別なく区切る(つまり「And」や「and」も同時に区切りにする)ことができます。



 区切られた各文字列を縦に並べることもできます。

 D3セル

=TEXTSPLIT(B3,,"☆")

 区切り「☆」を第3引数に指定すれば、区切られた文字列が縦に並びます。
 このとき第2引数に何も入れずカンマを並べるのがポイントで、空文字列("")などを入れるとエラーになります。



 横方向の区切りと縦方向の区切りを別々に指定すれば、区切られた文字列を縦横に並べることもできます。


 D3セル

=TEXTSPLIT(B3,"☆","★")

 「☆」を列区切り、「★」を行区切りとして指定しています。
 このとき、1行目には分割された文字列が3つ並びますが、2行目には2つしかないので、2行目の最後に#N/Aエラーが生じています。
 このようなセルに対して表示する文字列を第6引数(パディング)で指定することもできます。



 次の画像の式は一番最初の例と同じですが、B3セルの先頭に「☆」があり、さらに「☆」が連続する部分もあります。
 このようにテキスト先頭(及び末尾)の区切り、連続する区切りがある場合、それぞれの位置に対応する空のセル(空文字列)が表示されます。 
 しかし第4引数の設定によりこのようなセルを表示させないこともできます。


第4引数(空白を無視)の効果と使用例

 第4引数には次の2種の値を指定でき、省略した場合はFALSEを指定したものとみなされます。

効果
FALSEテキストの先頭・末尾の区切りや連続する区切りに対する空のセル(空文字列)を表示しない(既定値)
TRUEテキストの先頭・末尾の区切りや連続する区切りに対する空のセル(空文字列)を表示する


 次の画像は「FALSE」を設定した例です。これは既定値なので省略可能です。
 上記でみた例と同じく、先頭の「☆」と連続する「☆」に対応する空のセル(空文字列)が表示されます。

 D3セル

=TEXTSPLIT(B3,"☆",,FALSE)

 

 次の画像は「TRUE」を設定した例です。
 先頭にある「☆」と連続する「☆」が無視され、空のセル(空文字列)は表示されません。

 D3セル

=TEXTSPLIT(B3,"☆",,TRUE)

第5引数(大・小文字の区別)の効果と使用例

 第5引数には次の2種の値を指定でき、省略した場合は0を指定したものとみなされます。

効果
0区切りの大文字と小文字を区別する(既定値)
1区切りの大文字と小文字を区別しない


 次の画像は「0」を指定した例です。これは既定値なので省略可能です。
 区切りとして「and」を指定していますが、B3セルのテキスト中の「AND」や「And」などは区切りとみなされず、小文字の「and」だけによって区切られる結果となります。

 D3セル

=TEXTSPLIT(B3,"and",,,0)

 

 次は「1」を指定した例です。
 B3セルのテキスト中の「AND」や「And」なども区切りとみなされて、5つに区切られる結果となります。

 D3セル

=TEXTSPLIT(B3,"and",,,1)

 

 ただし、区切られるテキスト内の英字がどういうわけかすべて小文字に変換されます。
 英語圏で困りそうな仕様なので、そのうち変更されるかもしれません。

 D3セル

=TEXTSPLIT(B3," and ",,,1)

 ここでは見やすさのためテキストに半角スペースを含め、区切りを「and」ではなく、前後に半角スペースを含んだ「 and 」としています。


第6引数(パディング)の効果と使用例

 上記で見たように、行区切り(第3引数)を指定した場合、各行のセルの数の違いによって#N/Aエラーのセルが生じる場合があります。
 ここでは第6引数を「""」とすることで、エラーの代わりに空文字列を表示させています。

 D3セル

=TEXTSPLIT(B3,"☆","★",,,"")

注意点

複数のテキストに対するスピルの結果が不自然

 第1引数として複数のセル(テキスト)を指定したとき、それぞれのセルを分割した最初の項目しか表示されません(行区切りを指定していても同様)。

 D3セル

=TEXTSPLIT(B3:B5,"・")

 

 Excelはこの辺り(入れ子の配列)の制約が厳しいのが痛いところですが、対策がないわけではありません。
 次の画像ではいったん結合してから分割することで、分割したすべての文字列を得ています。

 D3セル

=TEXTSPLIT(TEXTJOIN("/",,B3:B5,),"・","/",,,"")

 「TEXTJOIN("/",,B3:B5,)」で区切り(/)を挿んで各セルのテキストを結合し、今度はTEXTSPLITでそれ(/)を縦区切りとして分割しています。
 テキスト中で使っていない文字を縦区切り(ここでは「/」)として指定する必要があります。また、結合した文字が数万字に達するとエラーになりますので大量のデータを扱う場合には向きません。
 これを避ける方法もありますが、詳しくは次の記事で紹介しています。

www.officeisyours.com


応用例

セル内改行で区切る

 セル内の改行で区切って分割するケースです。

 D3セル

=TEXTSPLIT(B3,CHAR(10))

 区切りとして「CHAR(10)」を指定すればOKです。



 次の例ではセル内改行とセルの境界をともに区切りとみなして縦に並べています。

 B6セル

=TEXTSPLIT(TEXTJOIN(CHAR(10),,B3:B4,),,CHAR(10))

 「TEXTJOIN(CHAR(10),,B3:B4,)」により、改行(CHAR(10))を挿んで各セルのテキストを結合し、今度はTEXTSPLITで「CHAR(10)」を縦区切りとして分割しています。
 ただしここでも結合した文字が数万字に達するとエラーになりますので注意が必要です。

複数種の列区切り/行区切りを設定する

 列区切り、あるいは行区切りとして複数種の文字(列)を設定する方法です。
 次の画像では「☆」と「★」をともに列区切りとしてテキストを分割しています。

 D3セル

=TEXTSPLIT(B3,{"☆","★"})

 第2引数を「{"☆","★"}」としています。これは「☆」と「★」からなる配列を意味します。
 どこかのセル上に区切りを記して設定するやり方(例としてB5に「☆」、B6に「★」を記しておく)なら普通に「B5:B6」で済むので、そういう指定の方が簡単かもしれません。

区切った結果のうちn番目を取得する

 区切った結果の一部だけ欲しいというケースです。
 ここでは4番目の文字列だけを取得しています。

 D3セル

=INDEX(TEXTSPLIT(B3,"☆"),4)

 新しいCHOOSECOLS関数でもいいですがINDEXでも済みます。
 ここではINDEX関数の第2引数でnを指定しています。
 なお、「n番目」というのは第4引数(空白を無視する)の設定により結果が変わりますので注意が必要です。



 また、「最後」とか「後ろからn番目」が欲しい場合はCHOOSECOLS関数を使うのが適当です。

 D3セル

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

 ここではCHOOSECOLS関数を使い、第2引数を「-1」とすることで最後の文字列だけを取得しています。