(Excel)条件に一致する文字列を結合する

 Excelで、条件に一致する文字列(条件に一致する行にある文字列)を結合する方法についてです。
 よく「SUMIFで文字列を結合」などと例えられますがSUMIFではできないので、別の関数を使う必要があります。

  • FILTER関数とCONCAT関数(区切り文字を入れる場合はTEXTJOIN関数)を併用すれば、条件に一致する文字列だけを結合した結果が得られます。
  • FILTER関数の代わりにIF関数を使う方法も考えられます。

単純に結合する場合

 文字列を区切り文字なしで結合するケースです。 
 次の画像では左側の表のうち、F3セルで指定した選手に対応する「評価」の文字列を結合した結果を得ています。

 G3セル

=CONCAT(FILTER(D3:D11,C3:C11=F3))

 なんとなく数値計算で合計を求めているのに近い感じなのでSUMIF関数で行けそうにも見えますが、やはりできません。
 そこで条件に一致する行の文字列をFILTER関数ですべて抽出し、CONCAT関数で結合しています。



 次の画像も同じ内容ですがFILTER関数の代わりにIF関数を使っています。

 G3セル

=CONCAT(IF(C3:C11=F3,D3:D11,""))

 条件を満たす行の選手名はそのまま、そうでない行の選手名は空文字列に変換してCONCAT関数で結合しています。
 最初の式とさほど変わりませんが、慣れた方の関数を使うのがよいでしょう。

区切り文字を入れて結合する場合

 次の画像ではE3セルで指定した県名に対応する市町村名を結合した結果を取得しています。
 ただしそのまま結合するのでなく、各文字列の間に区切り文字としてカンマを挿んでいます。

 F3セル

=TEXTJOIN(",",,FILTER(C3:C10,B3:B10=E3))

 FILTER関数で条件を満たす行の市町村名をすべて抽出し、TEXTJOIN関数で区切り文字(カンマ)を挿みつつ結合しています。
 ちなみに区切り文字を省略するか空文字列("")すると単純に結合した結果になります。



 次も同じ内容ですがFILTER関数の代わりにIF関数を使っています。

 F3セル

=TEXTJOIN(",",,IF(B3:B10=E3,C3:C10,""))

 IF関数により条件に一致しない行は空文字列に変換されますが、TEXTJOIN関数の設定により結合の対象とならず、余分なカンマが発生しません(第2引数をTRUEに、または省略した場合)。