見出し画像

SUMIFSをARRAYFORMULAしたい[Googleスプレッドシート]

GoogleスプレッドシートのARRAYFORMULA関数はとても便利な関数です。
ただARRAYFORMULAと組み合わせられない関数もいくつかあります。
SUMIFS関数もそのひとつです。

2022年8月に発表されたGoogleスプレッドシート新関数のうち、MAP関数とLAMBDA関数を組み合わせることでARRAYFORMULAっぽいことが実現できたので備忘録メモします。

以下のスプレッドシートを例にします。
列A-Eに売上データベースがあり、列G「担当者」と列H「都道府県」を検索キーとして、該当する売上の合計金額を列Iに返したいとします。

通常の場合、セルI2に以下の数式を用います。

=SUMIFS(E:E,C:C,G2,D:D,H2)

セルI3以降に同様の数式を入れたいのですが、ARRAYFORMULAが使用できないのでI2の数式をコピペすることになります。
今回の例ではSUMIFSを用いたい範囲が限られているのでコピペでもよさそうですが、出来るならセルI2にARRAYFORMULA的な数式を入れて済ませたいものです。

そこでMAP関数・LAMBDA関数の出番です。
セルI2に以下の数式を用います。

=MAP(G2:G,H2:H,LAMBDA(person,area,SUMIFS(E2:E,C2:C,person,D2:D,area)))

検索キーとする列G「担当者」と列H「都道府県」をMAP関数で指定し、LAMBDA関数でそれぞれ「person」「area」と名前を付けます。
その後、SUMIFS関数で「person」「area」を検索キーとして指定します。

結果はこちら。

セルI2の数式ひとつだけで、セルI3以降にも期待された値が返されました。

※このままだとSUMIFSの範囲外(この例ではセルI8以降)にゼロが返ってきてしまうので、IF関数などを併用するのが現実的かもしれません。

=MAP(G2:G,H2:H,LAMBDA(person,area,IF(person = "","",SUMIFS(E2:E,C2:C,person,D2:D,area))))

セルI8以降が空白になりスッキリしました。

※MAP関数やLAMBDA関数、私もまだまだ理解が至らない点も多いのですが、今回は私が所属しているコミュニティにてメンバーが発表されたLTに大きなヒントを頂き実現することができました。ありがとうございます!


この記事が気に入ったらサポートをしてみませんか?