Excel で、複数の条件に該当するセルのデータを横方向に抽出する

Excel を用いて、複数の条件をもとにセルのデータを横方向に抽出する必要が生じた。

要は、Sheet1 にある次のような表を

f:id:KainokiKaede:20211016121511p:plain
元表

公開フラグが立っているもののみ、次のように Sheet2 に整理(?)したい。

f:id:KainokiKaede:20211016121529p:plain
抽出表

Yahoo! 知恵袋 などには COUNTIF, MATCH 等を使って実現する方法が載っているが、上の表のように公開フラグなどの条件が入ってくると扱いづらそうに感じた。

最近の Office には FILTER, UNIQUE などの配列関数が実装された ようで、これらを用いれば複数条件に該当する値のリストを取得できる。

まず Sheet2 の A2 に次の式を入力する。(Excel の最大行数は 1048576 行である

=UNIQUE(Sheet1!$A$2:$A$1048576)

これで Sheet1 の A 列のうち重複を含まないものが Sheet2 のA列に表示される。

続いて Sheet2 の B2 に次の式を入力する。

=TRANSPOSE(FILTER(Sheet1!$C$2:$C$1048576, (Sheet1!$A$2:$A$1048576=$A2) * (Sheet1!$B$2:$B$1048576="公開")))

ここでは、まず FILTER 関数で第2引数の条件に合う行のC列を取得したうえで、TRANSPOSE で横向きに並べている。

最後にB2からB5までオートフィルすれば完成である。

式2つで表が作成できてオトクだと思うし既存の手法よりも式の見通しがよいと思う。難点は新しい Office が入っていないとこれらの関数が使えず、Excel のみでデータを弄る必要があるときには往々にして新しい Office は入っていないという点か。