結論:MAP、LAMBDA関数を使いましょう
ArrayFormula関数を使いこなしている人の中にはこういう困り事を抱える人もいませんか?
「SUMIFSやCOUNTIFSでもArrayFormulaしたいけど、うまく関数が機能しないなぁ」
そんなお困り事を解決していきます!
今回の例
上記セルG3にSUMIFS関数を入れるだけで、G4、G5にも関数を適用させたい
よし、ArrayFormulaだ!とするとこうなります
記載した関数
=ArrayFormula(sumifs(D3:D8,C3:C8,"*"&F3:F5&"*"))
関数を分解すると
①D列の合計を出してね
②条件としてC3からC8を見てね
③②の中に「田中」を含む文字があるものを足してね
④ArrayFormulaで繰り返して欲しいから、次は「鈴木」を含む文字があるものを足して欲しいなぁ
です。
ArrayFormulaではSUMIFSやCOUNTIFSなど対応していない関数があるので、
上記④が実現していないというわけです。
解決策:MAP、LAMBDA関数を使いましょう
まずは実際に記載した結果と関数をご覧ください
=map(F3:F5,lambda(name,sumifs(D3:D8,C3:C8,"*"&name&"*")))
では解説していきます
①map(順繰りに見に行きたい範囲を記述
今回のSUMIFSではF列に記載のある名前をキーに合計値を出したい
=F3をみて、次にF4をみて、最後にF5をみる
という動作をしたいので、
=map(F3:F5,
から開始しています
なお、順繰りに見に行きたい範囲が複数ある場合は
=map(F3:F5,E3:E5
のように複数設定することも可能です
②lambda(mapで指定した範囲の名前を決めます
lambdaの中ではまず、map内で指定した範囲の名前を任意に決めます(なんでもOKです)
今回はmapでF3:F5を指定しているので、「name」という名前をつけました
=map(F3:F5,lambda(name,
③普通に関数を書いていきます(今回はSUMIFS)
ここまで来たら、あとはほとんど通常の関数記載と同様です
今回はSUMIFS関数にて
1.D3からD8の合計を出したい
2.条件となる列はC3からC8
3.C3からC8にF3からF5の文字を含んでいるものだけ合計する
なので
sumifs(D3:D8,C3:C8,"*"&F3:F5&"*"))) ←間違い
と記載したいところですが、ここがポイントです
F3:F5はlambda内で「name」という名前をつけました
なので、SUMIFS内でもこの名前を使います
sumifs(D3:D8,C3:C8,"*"&name&"*"))) ←正解
よって最終的には
=map(F3:F5,lambda(name,sumifs(D3:D8,C3:C8,"*"&name&"*")))
という関数が組み上がり、先に記述したやりたいこと
①D列の合計を出してね
②条件としてC3からC8を見てね
③②の中に「田中」を含む文字があるものを足してね
④次は「鈴木」を含む文字があるものを足して欲しいなぁ
⑤最後に「佐藤」を含む文字があるものを足して欲しいなぁ
が実現できます!
いかがでしたでしょうか?
なかなか聞きなれない関数で、最初は戸惑うと思いますが、是非チャレンジしてみてください
なお、この関数はExcelでも使えます
それでは、ご高覧いただきありがとうございました!
コメント