アプリ版:「スタンプのみでお礼する」機能のリリースについて

既に閉じられた投稿ですが、

[Excel複数条件の式]
https://oshiete.goo.ne.jp/qa/12462480.html
に対して、fujillinさんが
=SUMPRODUCT((A1:A100<>"")*(WEEKDAY(A1:A100,2)>5)*(B1:B100=""))
という見事な回答をされています。

SUMPRODUCTは昔から存在する関数ですが、私が使用する Excel 2019 にある SUMIFS関数で上式と同じ戻り値を得る方法があれば教えてください。

A 回答 (2件)

関数にはその特徴により、「向き・不向き」があります。


ご質問者は
>土日が赤になっていて、備考が空白のものをカウントしたい場合
と質問されています。
カウントしたいのであれば、トモクンアヤチャンさんの回答のように、素直にCOUNTIFSを使うか、
あるいはfujillinさんの回答のようにSUMPRODUCT関数を使うのが「王道」だと思います。
これが、例えば
(1)土日の売上を集計したい。
(2)ただし、売上の発生していない土日については備考欄に記載があり、売上発生の場合は空欄である。
というようなケースではSUMIFSの出番になります。(SUMPRODUCTはある意味万能でこのようなケースでも使用可能です)
つまり、「カウントする」のではなく「集計する」「加算する」というようなケースにはSUMIFS関数が向いているということになります。
したがって、ご質問のようなケースで無理やりSUMIFS関数を使おうとすると作業列を追加せざるを得ないことになります。
「関数の勉強」のため、SUMIFSの機能をもっと深く知りたいという目的なら意味がありますが、実務としてSUMIFS関数で「集計」ではなく「カウント」を行うことは無駄が多くお勧めできません。
どうしてもSUMIFSとおっしゃるのであれば、添付画像のように作業列を追加すれば可能です。(添付画像は2021年7月ひと月分のデータとします)
添付画像のC2には、
WEEKDAY(A2,2)
という数式を入れて下方向へコピーしてあります。また、D列は「全ての行に『1』を入力しておく」など、ある意味無駄と思える作業が必要になってしまいます。
この状態で「カウント」を表示したいセルに
=SUMIFS(D2:D32,C2:C32,">5",B2:B32,"")
を記述すればよいということになります。
「SUMPRODUCT関数→SUMIFS関」の回答画像2
    • good
    • 0
この回答へのお礼

goomaniaさん、

懇切丁寧なご説明、納得できました!
誠にありがとうございました。

お礼日時:2021/07/17 20:08

SUMPRODUCTは配列を指定するのに対して、sumifsは検索範囲を指定するので、WEEKDAY(A1:A100,2)>5という記述はエラーになるようです。


そこで、c列(どこでも使ってないところ)に
=IF(A1="","",WEEKDAY(A1,2))(A1:A100までcopy)
とし、
=COUNTIFS(C1:C100,">5",B1:B100,"")
とすればできると思います。sumifは加算なので加算すべき数値を作る必要があります。sumproductは真なら1偽なら0を設定しています。
countifなら1を加算します。
    • good
    • 0
この回答へのお礼

トモクンアヤチャンさん、
コメント、多謝です。m(_._)m

古典的なSUMPRODUCTでできるものは、比較的新しいSUMIFSで実現可能と思い込んでいた私の能力不足で、実は良くは理解できておりません。
でも、ご提示いただいた「=COUNTIFS(…)とすればできる」ことは確認できました。

「sumifは加算なので加算すべき数値を作る必要があ」るとの由、該当する作業列を作成してでも、SUMIFSでの方法を教えていただけないでしょうか?それは無理難題なことでしょうか?

お礼日時:2021/07/17 14:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!