目次
このチュートリアルでは、Excel 365で全く新しいTEXTSPLIT関数を使って、指定した任意の区切り文字で文字列を分割する方法を紹介します。
Excelでは、セルを分割する必要がある場合があります。 以前のバージョンでは、「テキストを列に変換」や「フラッシュを塗りつぶす」など、このタスクを達成するための手段がすでに用意されていました。 また、指定したパラメータに基づいて、列や行にまたがる複数のセルに文字列を分割できる特別な機能、TEXTSPLITも用意されています。
Excel TEXTSPLIT関数
ExcelのTEXTSPLIT関数は、文字列を任意の区切り文字で分割し、複数のセルに自動的に流し込む動的な配列です。
この関数は6個もの引数を取り、そのうち最初の2個だけが必須である。
TEXTSPLIT(text, col_delimiter, [row_delimiter], [ignore_empty], [match_mode], [pad_with])テキスト (必須) - 分割するテキスト。 文字列またはセル参照として提供することができます。
col_delimiter (必須) - テキストを列で分割する位置を示す文字。 省略した場合は、"S "となります。 行頭デリミター を定義する必要があります。
行頭デリミター (オプション) - 行をまたいでテキストを分割する場所を示す文字です。
空白を無視する (オプション) - 空の値を無視するかどうかを指定します。
- FALSE (デフォルト) - 値を挟まない連続した区切り文字に対して空のセルを作成します。
- TRUE - 空の値を無視する、つまり、2つ以上の連続した区切り文字に対して空のセルを作らない。
match_mode (オプション) - 区切り文字の大文字と小文字を区別するかどうかを決定します。 デフォルトでは有効になっています。
- 0(デフォルト) - 大文字・小文字を区別する
- 1 - 大文字・小文字を区別しない
パッド付き (オプション) - 2次元配列の欠損値の代わりに使用する値です。 デフォルトは #N/A エラーです。
例えば、A2の文字列をカンマとスペースを区切りとして複数のセルに分割する場合、数式は次のようになります。
=textsplit(a2, ", ")
TEXTSPLITの有無
TEXTSPLIT 機能は、Microsoft 365(Windows、Mac)版 Excel および Web 版 Excel のみで利用可能です。
ヒント
- TEXTSPLIT機能が使えないExcelバージョン(Excel 365以外)では、Text to Columnsウィザードを使用してセルを分割することができます。
- 逆に、複数のセルの内容を、ある区切り文字を使って一つにまとめるには、TEXTJOINという関数を使います。
Excelでセルを分割する基本的なTEXTSPLITの計算式
手始めに、TEXTSPLIT式を最も単純な形で使って、テキスト文字列を特定のデリミターで分割する方法を見てみましょう。
セルを列をまたいで水平に分割する
与えられたセルの内容を複数の列に分割するには、元の文字列を含むセルへの参照を、最初の ( テキスト ) の引数、および2番目の( col_delimiter )の引数を指定します。
例えば、A2の文字列をカンマで横方向に区切るには、次のような式になります。
=textsplit(a2, ",")
デリミタには、二重引用符(",")で囲まれたカンマを使用する。
その結果、カンマで区切られた各項目は個別の列に入る。
セルを行をまたいで縦に分割する
テキストを複数行に分割する場合は、第3引数( 行頭デリミター ) は、デリミタを置く場所です。 第2引数 ( col_delimiter ) を省略することができる。
例えば、A2の値を別の行に分けるには、次のような式になります。
=textsplit(a2, ,",")
どちらの場合も、数式は1つのセル(C2)にのみ入力され、隣のセルでは返された値が自動的に流出することに注意してください。 結果の配列(流出範囲と呼ばれます)は、左上のセルの数式によってその中のすべてが計算されていることを示す青い枠で強調表示されます。
テキストを部分文字列で分割する
多くの場合、ソース文字列の値は一連の文字で区切られており、カンマとスペースはその典型例である。 このシナリオを扱うには、デリミタに部分文字列を使用することである。
例えば、A2 のテキストをカンマとスペースで複数の列に分けるには、文字列 ", " を使用します。 col_delimiter .
=textsplit(a2, ", ")
この数式はB2へ、そして必要な数だけセルをコピーしていきます。
文字列を一度に列と行に分割する。
テキスト文字列を一度に行と列に分割するには、TEXTSPLIT式で両方の区切り文字を定義します。
例えば、A2の文字列を列と行にまたがって分割する場合は、次のように入力します。
- の等号("=")が表示されます。 col_delimiter
- にはカンマとスペース("、")が必要です。 行頭デリミター
完全な式はこのような形になる。
=textsplit(a2, "=", ", ")
その結果、2列3行の2次元配列ができあがります。
複数のデリミターでセルを区切る
元文字列の中に複数の区切り文字があったり、一貫性がない場合は、区切り文字の引数に {"x", "y", "z"} のような配列定数を使用することで、処理することができます。
下のスクリーンショットでは、A2の文字列はカンマ(「,」)とセミコロン(「;」)の両方で区切られており、スペースがある場合とない場合があります。 4種類の区切り文字すべてで縦に列を分割するには、次の式になります。
=textsplit(a2, , {",",",",",";"," })
あるいは、配列にカンマ(",")とセミコロン(";")だけを入れ、TRIM関数の助けを借りて余分なスペースを削除することもできます。
=trim(textsplit(a2, , {",",";"}))
空値を無視してテキストを分割する
文字列が2つ以上の連続した区切り文字を含み、その間に値がない場合、そのような空の値を無視するかどうかを選択することができます。 この動作は、4番目の 空白を無視する パラメータがあり、デフォルトは FALSE です。
デフォルトでは、TEXTSPLIT関数は空の値を無視しません。 このデフォルトの動作は、次の例のように構造化されたデータに対してうまく機能します。
このサンプル表では、一部の文字列でスコアが欠落しています。 TEXTSPLIT式で 空白を無視する 引数を省略または FALSE に設定すると、このケースは完全に処理され、空の値ごとに空のセルが作成されます。
=textsplit(a2, ", ")
または
=textsplit(a2, ", ", false)
その結果、すべての値が適切な列に表示されます。
文字列が均質なデータである場合、空の値を無視するのは当然です。 そのためには 空白を無視する 引数を TRUE または 1 に設定する。
例えば、以下の文字列を分割して、それぞれのスキルを隙間なく別々のセルに配置するには、次のような数式を使用します。
=textsplit(a2, ", ", ,true)
この場合、連続するデリミタ間の欠損値は完全に無視される。
セル分割の大文字・小文字を区別する/しない
デリミターの大文字・小文字を区別する場合は、第5引数を使用する。 match_mode .
デフォルトでは match_mode を0に設定することで、TEXTSPLITを ケースセンシティブ .
この例では、小文字の "x "と大文字の "X "で数字を区切っています。
デフォルトの大文字小文字を区別する数式は、小文字の「x」だけを区切り文字として受け付けます。
=TEXTSPLIT(A2, " x ")
デリミタには、結果に先行・後続のスペースが入らないように、" x "の両側にスペースがあることに注意してください。
大文字小文字の区別をしない場合は、1 を入力します。 match_mode を使えば、TEXTSPLIT 式が文字ケースを無視するように強制することができます。
=TEXTSPLIT(A2, " x ", , ,1)
これで、すべての文字列がどちらのデリミタでも正しく分割されるようになりました。
2次元配列の欠損値を埋める
TEXTSPLIT関数の最後の引数です。 パッド付き このような文字列が列と行の両方に分割されている場合、Excelのデフォルトでは、2次元配列の構造を混乱させないために、欠損値の代わりに#N/Aエラーを返します。
以下の文字列では、"="はありません( col_delimiter TEXTSPLITは "Score "の後に#N/Aを出力する。
この結果をより使いやすくするために、#N/Aエラーを任意の値に置き換えることができます。 単純に、希望の値を パッド付き の議論になります。
この場合、ハイフン("-")になる可能性があります。
=textsplit(a2, "=", ", ", , ,"-")
または空文字列("")。
=textsplit(a2, "=", ", ", ,")
TEXTSPLIT関数の各引数の実用的な使い方を学んだところで、Excelスプレッドシートの自明でない課題に対処するための高度な例について説明しましょう。
日付を日、月、年に分割する
Excelの日付は数値ですが、TEXTSPLIT関数は文字列を扱うので、日付を個々の単位に分割するには、まず、日付をテキストに変換する必要があります。
数値をテキストに変換する最も簡単な方法は、TEXT関数を使用することです。 ただ、日付に適切なフォーマットコードを指定する必要があります。
私たちの場合、その計算式は
=TEXT(A2, "m/d/yyyy")
次に、TEXTSPLITの第1引数に上記の関数を入れ、第2または第3引数に、列と行のどちらに分割するかによって、対応する区切り文字を入力する。 この例では、日付単位がスラッシュで区切られているので、"/"を使って col_delimiter の議論になります。
=TEXTSPLIT(TEXT(A2, "m/d/yyyy"), "/")
セルの分割、特定の文字の削除
想像してみてください。長い文字列を分割しましたが、出来上がった配列には、下のスクリーンショットのような括弧のような不要な文字がまだ残っています。
=textsplit(a2, ", "; ")
開閉括弧を一度に取り除くには、2つのSUBSTITUTE関数を互いに入れ子にして(それぞれ1つの括弧を空文字列に置き換える)、TEXTSPLIT式で テキスト の引数は、内側のSUBSTITUTEの引数である。
=substitute(substitute(textplit(a2, ", "; "), "(", ""), "), ")")
ヒント:最終的な配列に余分な文字が多く含まれている場合は、こちらの記事「Excelで不要な文字を削除する方法」で紹介されている方法のいずれかを使用して、余分な文字を削除することができます。
特定の値をスキップして文字列を分割する
例えば、以下の文字列を4列に分けたいとします。 氏名(フリガナ , ラストネーム , スコア そして 結果 問題は、文字列の中に "Mr. "や "Ms. "という肩書きを含むものがあり、そのために結果がすべて間違っていることです。
解決策は明白ではありませんが、非常にシンプルです :)
既存の区切り文字であるスペース(" ")とカンマ(", ")に加え、文字列 "Mr" と "Ms. col_delimiter 配列の定数を設定することで、この関数がタイトルそのものを使ってテキストを区切るようにします。 空の値を無視するためには、配列に 空白を無視する 引数を TRUE に設定する。
=TEXTSPLIT(A2, {" ",",", "さん"}, ,TRUE)
これで、仕上がりはまったく問題なし!
TEXTSPLITの代替品
TEXTSPLIT機能がサポートされていないExcelのバージョンでは、SEARCH / FIND機能とLEFT、RIGHT、MIDの組み合わせを変えて、文字列を分割することができます。 特に、以下のような場合に便利です。
- 大文字小文字を区別しないSEARCHや大文字小文字を区別するFINDは、文字列内のデリミタの位置を判断し
- LEFT, RIGHT, MID関数は、デリミタの前後または間の文字列を抽出する。
で区切られた値を分割する場合、この例では カンマとスペース となり、次のような式になる。
名前を抽出するには
=left(a2, search(",", a2, 1) -1)
スコアを引っ張ること。
=mid(a2, search(",", a2) + 2, search(",", a2, search(",",a2)+1) - search(",", a2) - 2)である。
結果を得るために
=right(a2, len(a2) - search(",", a2, search(",", a2) + 1)-1)
式のロジックの詳細については、文字やマスクで文字列を分割する方法を参照してください。
動的配列のTEXTSPLIT関数とは異なり、これらの数式は伝統的な1数式1セル方式であることに留意してください。 最初のセルに数式を入力し、それを列方向にドラッグして下のセルにコピーするのです。
下のスクリーンショットはその結果です。
以上、Excel 365でTEXTSPLITや以前のバージョンでの代替策を使ってセルを分割する方法でした。 読んでくださってありがとうございました!また来週、当ブログでお会いしましょう。
練習用ワークブック(ダウンロード
文字列を分割するTEXTSPLIT関数 - 計算式例(.xlsxファイル)