Excelの小技 ~デリミタを複数指定する~
こんにちは、システム革新Gのgrandpa Hamaです。
前回はLET関数をご紹介しました。
今回は文字列分割を行う、TEXTBEFORE/TEXTAFTER/TEXTSPLIT関数のお話です。
これらの関数は以下のバージョンで使用できる比較的新しい関数です。
・TEXTBEFORE/TEXTAFTER関数は、Microsoft 365以降のExcelバージョン
・TEXTSPLIT関数は、Microsoft 365およびExcel 2019以降のバージョン

目次
Excelの小技 ~デリミタを複数指定する~
-はじめに
みなさんは氏名を性と名に分割するといったことに直面したことはないでしょうか。

この場合、Microsoft 365以前のバージョンではFIND、LEFT、RIGHTを組み合わせて以下のようにして分割していたと思います。
性の取り出し:=LEFT(A1, FIND(” “, A1)-1)
名の取り出し:=RIGHT(A1, LEN(A1)-FIND(” “, A1))
これをTEXTBEFORE/TEXTAFTER/TEXTSPLITを使用すると以下のようになります。
性の取り出し:=TEXTBEFORE(A1,” “)
名の取り出し:=TEXTAFTER(A1,” “)
姓名の分割 :=TEXTSPLIT(A1,” “)
FIND、LEFT、RIGHTを組み合わせて取り出すより、シンプルで分かり易く簡単に分割することができます。
-構文説明
それぞれの構文は以下の通りです。
① TEXTBEFOREの構文
=TEXTBEFORE(text,delimiter,[instance_num],[match_mode],[match_end], [if_not_found])
| text | 検索対象のテキスト。 ワイルドカード文字は使用できません。 テキストが空の文字列の場合、Excel は空のテキストを返します。 必ず指定します。 |
| delimiter | 抽出する前のポイントをマークするテキスト。 必ず指定します。 |
| instance_num | テキストを抽出する区切り記号のインスタンス。 既定では、instance_num = 1 です。 負の数を指定すると、テキストの末尾から検索が開始します。 省略可能です。 |
| match_mode | テキスト検索で大文字と小文字を区別するかどうかを決定します。 既定では大文字と小文字が区別されます。 省略可能です。 次のいずれかを入力します 0:大文字と小文字を区別します。 1:大文字と小文字を区別しません。 |
| match_end | テキストの末尾を区切り記号として扱います。 既定では、テキストは完全一致です。 省略可能です。 次のように入力します。 0:区切り記号をテキストの末尾に一致させないでください。 1:区切り記号をテキストの末尾に一致させてください。 |
| if_not_found | 一致するものが見つからない場合に返される値。 既定では、#N/A が返されます。 省略可能です。 |
② TEXTAFTERの構文
=TEXTAFTER(text,delimiter,[instance_num],[match_mode],[match_end], [if_not_found])
| text | 検索対象のテキスト。 ワイルドカード文字は使用できません。 必ず指定します。 |
| delimiter | 抽出した後のポイントをマークするテキスト。 必ず指定します。 |
| instance_num | テキストを抽出する区切り記号のインスタンス。 既定では、instance_num = 1 です。 負の数を指定すると、テキストの末尾から検索が開始します。 省略可能です。 |
| match_mode | テキスト検索で大文字と小文字を区別するかどうかを指定します。 既定では大文字と小文字が区別されます。 省略可能です。 次のいずれかを入力します。 0:大文字と小文字を区別します。 1:大文字と小文字を区別しません。 |
| match_end | テキストの末尾を区切り記号として扱います。 既定では、テキストは完全一致です。 省略可能です。 次のいずれかを入力します。 0:区切り記号をテキストの末尾に一致させないでください。 1:区切り記号をテキストの末尾に一致させてください。 |
| if_not_found | 一致するものが見つからない場合に返される値。 既定では、#N/A が返されます。 省略可能です。 |
③ TEXTSPLITの構文
=TEXTSPLIT(text,col_delimiter,[row_delimiter],[ignore_empty], [match_mode], [pad_with])
| text | 分割するテキスト。必ず指定します。 |
| col_delimiter | 列間でテキストをスピルするポイントを示すテキスト。 |
| row_delimiter | テキストを下の行に書き込むポイントを示すテキスト。 省略可能です。 |
| ignore_empty | 連続する区切り記号を無視するには TRUE を指定します。 既定値は FALSE で、空のセルが作成されます。 省略可能です。 |
| match_mode | 大文字と小文字を区別しない一致を実行するには、1 を指定します。 既定値は 0 で、大文字と小文字を区別する一致が行われます。 省略可能です。 |
| pad_with | 結果を埋め込む値。 既定値は #N/A です。 |
-デリミタ(delimiter)
今回、一番話したかったのは、このデリミタの部分です。
みなさんは氏名の区切りが半角スペースだったり、全角スペースだったり、区切り文字が複数必要になるケースに陥ったことはないでしょうか。
その場合、半角スペースか全角スペースに統一するといった一手間が必要だったりしますよね。
この時、TEXTBEFORE/TEXTAFTER/TEXTSPLIT関数はデリミタを複数指定することが可能なんです。
2番目のパラメータを中括弧「{}」で括り、半角スペースと全角スペースを指定します。

C1セル:=TEXTBEFORE(A1,{” “,” ”})
C2セル:=TEXTBEFORE(A2,{” “,” ”})
D1セル:=TEXTAFTER(A1,{” “,” ”})
D2セル:=TEXTAFTER(A2,{” “,” ”})
C3セル:=TEXTSPLIT(A3,{” “,” ”})
C4セル:=TEXTSPLIT(A4,{” “,” ”})
これで半角・全角どちらの場合でも性と名を分割することができます。
例えば以下のようにアンダーバーとハイフンで区切られた文字列はTEXTSPLITを使用すれば区切り文字で分割して値だけを取り出すことができます。
C1セル:=TEXTSPLIT(A1,{“_”,”-“})

-おわりに
これらの関数の存在は知っており多用していたのですが、デリミタが複数指定できるということを
つい最近まで知りませんでした。
衝撃&感動です。
現状ではMicrosoft 365やExcel 2019でしか使用できませんが、皆さんも是非使ってみてください。
2025/11時点の情報をもとにしています。
