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

Excelで明細データから報告用サマリを自動作成! 必要な情報を1つのセルにまとめる技

明細データから担当者一覧をカンマ区切りで取り出す

 セミナーの開催履歴や営業活動の記録など、1件につき1行の明細形式で管理されている表がありますよね。しかし、全体をとりまとめて報告書などに掲載する際には「セミナーごとの担当者一覧」のように、複数のデータを1つのセルへまとめて表示したいことがあります。

セミナーごとの担当者を「,」で区切ってまとめたい

 もちろん、データを分析する際にはフィルターの機能やPower Queryを利用して、該当者を抽出することもできますが、1つのセルにまとめるには、抽出した結果をコピーして貼り付けたうえで、「,」を入力しながら連結する必要があります。

 今回は、明細形式の表から項目単位でデータを自動的にとりまとめるテクニックを紹介します。

UNIQUE関数で一意のデータを取り出す

 まずは、UNIQUE関数を利用して明細データからセミナー名だけを重複なく抽出します。指定した範囲から重複を除いた値だけを取り出せます。さらにSORT関数を組み合わせると、昇順に並べ替えられます。ただし、文字列の読みの順ではなく、文字コード順となります。

セルに「=SORT(UNIQUE(C2:C23))」と入力する
一意のデータが昇順で表示された。数式の結果はスピルで表示される

FILTER関数で該当するデータを抽出する

 セミナー名に対応する担当者を抽出するには、FILTER関数を利用します。ここでは挙動を確認しやすいよう、TRANSPOSE関数を組み合わせて横方向に表示してみましょう。

 例えば「Copilot活用」の担当者を抽出する場合は、次のような数式になります。数式をコピーすることを考慮して、FILTER関数の引数に指定するセル範囲は絶対参照で指定しています。

=TRANSPOSE(FILTER($D$2:$D$27,$C$2:$C$27=F2))

セルG2に上記の数式「=TRANSPOSE(FILTER($D$2:$D$27,$C$2:$C$27=F2))」を入力する
該当する担当者が取り出せた
数式をコピーしておく

UNIQUE関数で重複を除く

 しかし、該当の担当者は取り出せましたが、担当者が重複しているのは問題です。UNIQUE関数を組み合わせて取り除きましょう。FILTER関数で抽出した結果に対してUNIQUE関数を適用し、その結果をTRANSPOSE関数で横方向へ表示するため、TRANSPOSE関数は一番外側に配置します。

 先ほど入力した数式の「TRANSPOSE(」の後ろにカーソルを移動して「uni」と入力し、入力候補として表示されたUNIQUE関数を選択して[Tab]キーを押します。「UNIQUE(」と入力されたら、そのまま[Enter]キーを押します。最終的な数式は以下のようになります。

=TRANSPOSE(UNIQUE(FILTER($D$2:$D$27,$C$2:$C$27=F2)))

「TRANSPOSE(」の後ろにカーソルを移動して「uni」と入力すると、入力候補の関数が一覧で表示される。「UNIQUE」を選択して[Tab]キーを押す
「UNIQUE(」と入力される。そのまま[Enter]キーを押す
末尾の閉じカッコを補完するかどうかのメッセージが表示される。[はい]をクリックする
修正した数式をコピーすると、担当者の重複が取り除かれる

TEXTJOIN関数で1つのセルへまとめる

 最後に「,」を挟んで、1つのセルにまとめましょう。TEXTJOIN関数を利用します。区切り文字はダブルクォーテーション(")で囲んで指定します。修正後の数式は以下のようになります。2つ目の引数[空のセルは無視]は「TRUE」とします。

=TEXTJOIN(",",TRUE,TRANSPOSE(UNIQUE(FILTER($D$2:$D$27,$C$2:$C$27=F2))))

「=」の後ろにカーソルを移動して「te」と入力すると、入力候補の関数が一覧で表示される。「TEXTJOIN」を選択して[Tab]キーを押す
「TEXTJOIN(」と入力される。続けて引数を入力する
「",",TRUE,」と入力して、そのまま[Enter]キーを押す
末尾の閉じカッコを補完するかどうかのメッセージが表示される。[はい]をクリックする
修正した数式をコピーしておく

一気に連結するならTRANSPOSE関数は不要

 ここまで挙動を確認するために順を追って数式を修正してきましたが、区切り文字の「,」とデータを連結するなら、TRANSPOSE関数は不要です。FILTER関数で取り出したデータの重複をUNIQUE関数で除外し、TEXTJOIN関数で「,」を挟んで連結します。

=TEXTJOIN(",",TRUE,UNIQUE(FILTER($D$2:$D$27,$C$2:$C$27=F2)))

「,」区切りでデータを連結してまとめるだけなら、TRANSPOSE関数は不要

 FILTER関数とTEXTJOIN関数を組み合わせれば、明細データからサマリを効率よく作成できるようになります。明細形式のデータを集約したい場面で活用してみてください。