「大量」かつ「速い」注文を数える(SUMPRODUCT)
問題
問題文
調達は「100個を超え、5日以内に出荷された」注文を知りたい。個数は B2:B6、出荷日数は C2:C6 にあり、しきい値はシート上の E1、E2 にあります。件数を Both セル F3 に入れてください。
1つの式で2つの条件を同時に扱います。作業列を足したり、2つの件数を合計したりしないでください。
問題のデータ
表でデータ全体を見る(選択・コピーできます)
| A | B | C | E | |
|---|---|---|---|---|
| 1 | Order | Units | Days to ship | Units > 100 |
| 2 | SO-1 | 120 | 4 | Days < 5 |
| 3 | SO-2 | 80 | 9 | Both |
| 4 | SO-3 | 300 | 3 | |
| 5 | SO-4 | 60 | 7 | |
| 6 | SO-5 | 210 | 2 |
ポイント解説
SUMPRODUCT((B2:B6>100)*(C2:C6<5)) は TRUE/FALSE の配列を2つ掛けます。掛け算は AND の働き(1*1 = 1、0 が入れば 0)で、SUMPRODUCT が積を合計するので、両方を満たす行数になります。COUNTIFS は条件文字列で同じことができ、比較が単純なときは読みやすくなります。
解き方のヒント
回答は F3 に入力します。送信時は 3 通りの入力で数式を再実行するので、数値を直接書くと必ず失敗します。数式はセルを参照してください。
- 対象セルは F3
- B2:B6>100 と C2:C6<5 の2つの配列を作る
- 掛け合わせて両方成り立つ行だけ残す
- 形:=SUMPRODUCT((?)*(?))
模範解答
模範解答を表示(2 通り・まずは自分で試してみましょう)
方法1:2つの真偽値配列を掛ける
=SUMPRODUCT((B2:B6>100)*(C2:C6<5))
SO-1(120, 4)、SO-3(300, 3)、SO-5(210, 2)が条件を満たし、1+0+1+0+1 = 3。掛け算が AND、SUMPRODUCT が件数になります。
方法2:COUNTIFS と2つの数値条件
=COUNTIFS(B2:B6, ">100", C2:C6, "<5")
条件文字列でも同じ答えです。しきい値が単純なら COUNTIFS が読みやすく、条件の中に関数(LEFT、MONTH、ISNUMBER)が必要なら SUMPRODUCT を使います。
関数ガイド
よくある質問
2つの数値条件を同時に満たす行はどう数えますか?
=SUMPRODUCT((範囲1>a)*(範囲2<b))、または =COUNTIFS(範囲1, ">"&a, 範囲2, "<"&b) です。どちらもすべての条件を満たす行だけを数えます。
SUMPRODUCT にかっこが必要なのはなぜ?
かっこがないと比較の結合が変わり、SUMPRODUCT(B2:B6>100) は最初の要素しか評価しません。各比較をかっこで囲むことで、配列全体を作ってから掛けられます。