残業を減らす!Officeテクニック

ExcelのLEFT/MID/RIGHT関数は複雑すぎる! もっと楽に文字列を分割・抽出する関数

既存の文字列を分割・抽出する時に最適な関数はどれ?

 1つのセルに複数の情報が入った表を扱うことがありますよね。記号やスペースなどで区切られていることが一般的です。

1つのセルに複数の情報が入力されている例

 閲覧するだけなら問題はありませんが、このままでは並べ替えや絞り込みが思い通りに動作しないため、集計や分析には向きません。実務では扱いにくい状態と言えます。

 では、区切り記号の位置で分割したり、必要な部分だけを取り出したりしたい場合は? 手間なく処理するために関数を利用すると便利です。

 氏名を取り出すには、FIND関数で「/」の位置を取得して、LEFT関数を使う。「/」と「・」で区切られた部署と地域を分割するには、LEFT/MID/RIGHT関数、さらにFIND/LEN関数を組み合わせて……、と考えた人は、Excelを使い込んでいますね?

例えば、部署を取り出す場合は、MID/FIND関数を組み合わせて「=MID(B2,FIND("/",B2)+1,FIND("・",B2)-FIND("/",B2)-1)」のような数式になる

 LEFT/MID/RIGHT関数を利用して目的の文字列を取り出す場合は、FIND関数やLEN関数で区切り記号の位置を探す必要があるため、どうしても数式が長くなってしまいます。区切り記号を除外するための調整(-1や+1)が必要になるため、理解しにくいものです。そこで今回は、このような「文字列分割」を簡略化できる新しい関数をまとめて紹介します。

区切り記号の位置で分割できるTEXTSPLIT関数

 区切り記号の位置で別々のセルに分割して表示したい場合は、TEXTSPLIT関数が便利です。引数[テキスト]と[列区切り記号]もしくは[行区切り記号]の2つを指定することで動作します。

TEXTSPLIT関数の構文。分割する対象を引数[テキスト]に指定する。分割の目安にする区切り記号を[列区切り記号](横方向)、もしくは[行区切り記号](縦方向)に指定する。[空のセルは無視]、[一致モード]、[パディング値]は省略可能

 [空のセルは無視]は、区切り記号が連続する場合に無視(TRUE)するか、空白を含める(FALSE)かを指定します。既定「FALSE」で省略可能です。

 [一致モード]は、区切り記号の大文字と小文字を区別するかどうかです。省略時は大文字と小文字を区別する「0」と見なされます。[パディング値]は[列区切り記号]と[行区切り記号]の両方を指定した場合、該当する区切り記号が存在しない場合に表示する値を指定します。既定では「#N/A」となります。

 単純な例として「/」の位置で分割してみましょう。ここでは横方向に分割するので、[列区切り記号]に「"/"」と指定します。

セルC2に「=TEXTSPLIT(B2,"/")」と入力する
「/」の前後で別々のセルに分割された
オートフィルでコピーすれば、他のセルも同様に分割できる

TEXTSPLIT関数に複数の区切り記号を指定する

 「/」に加えて「・」の前後でも分割する場合は、「{"/","・"}」のように、「{」と「}」で囲んで複数の区切り記号を指定することができます。MID/FIND関数を組み合わせた数式と比較してかなり簡単ですよね。

セルC2の数式を「=TEXTSPLIT(B2,{"/","・"})」のように書き換える
「/」と「・」の前後で別々のセルに分割された
オートフィルでコピーすれば、他のセルも同様に分割できる

 区切り記号が増減する可能性がある場合は、リスト化しておくと便利です。該当の区切り記号が含まれない場合は無視されます。

区切り記号をリスト化しておく。「(」と「)」を追加した状態
セルC2に「=TEXTSPLIT(B2,$H$2:$H$5)」と入力する。「$H$2:$H$5」は区切り記号のリストのセル範囲の意味。絶対参照で指定しておく
指定した区切り記号が含まれないセルは無視される

区切り記号の前後を取り出すTEXTBEFORE/TEXTAFTER関数

 区切り記号を目安として「前」や「後」を取り出せるのが、TEXTBEFORE/TEXTAFTER関数です。TEXTSPLIT関数と同様に、引数[テキスト]に分割する対象、[区切り記号]に区切り記号を指定します。

TEXTBEFORE/TEXTAFTER関数の構文。TEXTBEFORE関数は[テキスト]の[区切り記号]よりも前、TEXTAFTER関数は後ろの文字列を返す。複数の[区切り記号]が含まれる場合は[インスタンス番号]に数値を指定可能。[インスタンス番号]を省略した場合は「1」と見なされて、1つめの[区切り記号]より前が取り出されます。TEXTAFTER関数の使い方も同様

 対象のセルと目的の区切り記号のみを指定することがほとんどでしょう。3つめ以降の引数は省略して構いません。例えば「/」より前の氏名を取り出したい場合は「=TEXTBEFORE(B2,"/")」のように指定します。

 なお、TEXTBEFORE/TEXTAFTER関数の引数[テキスト]にセル範囲を指定して、「=TEXTBEFORE(B2:B6,"/")」のように入力すると、結果は下方向へスピルで表示されます。

「=TEXTBEFORE(B2:B6,"/")」と入力すれば、セルB2~B6の「/」より前を一気に取り出せる

 TEXTAFTER関数の使い方も同様です。地域を取り出すには「・」より後ろとなるので、数式は「=TEXTAFTER(B2:B6,"・")」のようになります。

「=TEXTAFTER(B2:B6,"・")」と入力すれば、セルB2~B6の「・」より後ろを一気に取り出せる

 「/」と「・」の間を取り出す場合は、TEXTBEFORE/TEXTAFTER関数を組み合わせます。どちらを外側にしても構いませんが、区切り記号の組み合わせを間違えないように注意してください。

「/」と「・」の間を取り出す場合は「=TEXTBEFORE(TEXTAFTER(B2:B6,"/"),"・")」と入力する
TEXTAFTER関数を先にして「=TEXTAFTER(TEXTBEFORE(B2:B6,"・"),"/")」としても結果は同じになる

 文字列の分割に使える関数は他にもありますが、TEXTSPLIT/TEXTBEFORE/TEXTAFTER関数は直感的に使えて、数式も単純化できます。データ整形の1つの方法として覚えておくと便利ですよ。