[[20260918112918]] 『SUMPRODUCT VALUE 関数について』(ひさちゃん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『SUMPRODUCT VALUE 関数について』(ひさちゃん)

別表より集計データを作成したいと思っていますが
現在は下記(次月以降受注予定)資料より月別売上実績表を作っています
■C2セルの関数
=SUMPRODUCT((C14:C20=$A2)*VALUE(B14:B20))

[月別売上実績]
 【 A 】  【 B 】   【 C 】
   月    売上    受注済み
2  9月   250,000   250,000
3 10月    0       85,000
4 11月    0       150,000
5 12月    0       0
6  1月    0       12,000
7  2月    0      68,000
8 上期計  250,000   565,000
9 翌期予定      #N/A

[次月以降受注予定]
【 A 】 【 B 】 【 C 】

	金額	検収予定
14 A社	50000	10月
15 B社	35000	10月
16 C社	150000	11月
17 A社	68000	2月
18 A社	39000	3月
19 C社	12000	1月
20 F社	250000	9月

この時、受注予定の3月は翌期になることから
C9セルに18行目の39000が表示されるようにしたいと思っています。
当初
=SUMPRODUCT(($C$14:$C$20<>$A2:A7)*VALUE($B$14:$B$20))
で答えが求められるかなと思っていましたがエラーとなりました。
当社の1期分は
3月〜2月となるので、2027/3/1以降を翌期として合計したいです。
因みに、月別表示は書式設定によって月だけの表示となっていますが
月も検収予定も西暦入力し統一しています。
検証してみた結果
=SUMPRODUCT(($C$14:$C$20<>$A2)*VALUE($B$14:$B$20))
は答えが求められたので<>については間違っていないと思うのですが…。

なんだか見にくい表となってしまいましたが、翌期の集計データが拾えるような関数を教えてください。

< 使用 Excel:unknown、使用 OS:unknown >


 >2027/3/1以降を翌期として合計したいです。 

 なら

 >=SUMPRODUCT(($C$14:$C$20<>$A2:A7)*VALUE($B$14:$B$20)) 
                ↓   
  =SUMPRODUCT(($C$14:$C$20 > A7   )*VALUE($B$14:$B$20)) じゃないですか? 

 VALUE()で括る必要性を感じないですけども‥

(半平太) 2026/09/18(金) 12:51:40


半平太様

=SUMPRODUCT(($C$14:$C$20 > A7 )*VALUE($B$14:$B$20))
ほんとだ…できました。
指定の月以外
ではなく
それ以降
という考え方をすればいいですね。
ありがとうございます。

> VALUE()で括る必要性を感じないですけども‥
については、適正ではないということですか?

(ひさちゃん) 2026/09/18(金) 12:56:40


 書いてからいらないかもって思ったんですが。
 <>の使い方というか配列の処理について疑問が書かれているので、
 非常にわかりにくいexcelの挙動について補足します。

 ・value関数はいらないのか
 value関数は数字(文字列)を数値に変える関数ですが、
 excelの仕様で *(掛け算)や -(引き算)をする場合、
 10進数として扱える数字は自動的に数値として扱われます。
 (+ だけはなぜか、計算が行われないと数字のままですが)
 そのため、今回の数式のように計算に巻き込むのであれば、
 変換するためだけの value は不要です。

 ・<>の使い方(配列と配列の計算)最初に #N/A になったのは、
 条件式 $C$14:$C$20<>$A2:A7 が「1列7行」と「1列6行」という、
 違うサイズ同士を比較していたからです。
 同じ行数の値を上から順番に比較していった結果
 片方が空(データが足りない)の7行目で #N/A になります。
 配列の結果が {TRUE; FALSE; FALSE; TRUE; TRUE; #N/A} のようになるため、
 全体が #N/A に引っ張られていました。

 ・なぜ > A7 だとエラーにならないのか
 そう聞くと、「じゃあ > A7 に変えたら、今度は7行と1行の比較になるから#N/A になるのでは?」
 と思うかもしれません。
 ここがexcelの特殊な挙動で、比較する片方の「行数」や「列数」が「1」の場合、
 相手のサイズに合わせて自動的に中身がコピーされて補完される 
 という仕様があります。そのため、> A7 と書くと
 内部的には「7行すべてが A7 の値が入った配列」
 に拡張されて比較されるため エラーが出なくなります。

 ただ、仮に最初の数式が同じ行数同士でエラーを回避できていたとしても、
 期待通りの「どれとも一致しない」という全体の比較にはならず、
 目的の値にはなりません。
 間違った数字のままスルーしてしまう危険があったので
 エラーが出てよかったかもですね。
(ちくわ) 2026/09/18(金) 13:45:40

 Microsoft365でしょうから、
 =SUM(FILTER(B14:B20,C14:C20>A7))
 と書けますね。
(xyz) 2026/09/18(金) 21:27:06

 SUMIFで
 C2:=SUMIF($C$14:$C$20,A2,$B$14:$B$20)
 C9:=SUMIF(C14:C20,">"&A7,B14:B20)
 と書けますね。

 14行目以下の金額は数値でしょう?
 なぜVALUEが必要だと思ったんですか?
(しんぷる) 2026/09/19(土) 09:29:16

ちくわ 様

私の「なぜ」に具体的にご説明いただいてありがとうございます。
そもそもの成り立ちや構成に対して知識不足の為、正直文章を読んで深く「あ、そうか」とは今のところ至っておりませんが、勉強になります。

なぜ、VALUE関数を用いたかというと、当初ネット検索した際Copilot Search等に表示された関数を引用したからです…。
考え方というか関数の意味や配列などを組み立てるのに、どうしても「〜ならば」や「〜以外で」など頭の中で文章化してしまうところもあり、もっともっと関数の種類など知識が必要ですね。

(xyz)様

端的に回答をくださってありがとうございます。
FILTER関数も初めて知りました。
助かります。

(しんぷる)様

そうだ。SUMIF関数がありましたね。
なんだか難しく考えてしまい、思いつきませんでした。

(ひさちゃん) 2026/09/25(金) 09:29:33


(xyz)様

 =SUM(FILTER(B14:B20,C14:C20>A7))
実施してみました。
例えば、翌期の記載(該当)が無かった場合を想定して実施してみたのですが、
CALCというエラーが出ました。
条件に一致するデータが無い場合のエラーとのことですので
C18セルの3月を消してみたらそうなりました。
該当なしの場合、0 としたいので、第3の因数を0にしてみたら、結果が求められました。
""(空白)を返すことは出来ないのですね。

 因みに、SUMを付けない形でしたら第3の因数を""にしてみたら空欄になりました。
FILTER関数の前にSUMを付けているのは数字として扱う為ですか?
(ひさちゃん) 2026/09/25(金) 10:13:17

(xyz)様

 何度もすいません。
分かっちゃいました。該当セルを合計するためですね?
翌期データを2件に増やしてみたら、39,000の他に該当数字が一つ下のセルに表示され、合計されませんでした。
お騒がせして申し訳ございませんでした。

(ひさちゃん) 2026/09/25(金) 10:19:56


 因みに、当初の質問の逆パターン方法を教えていただきたいです。
>当社の1期分は
>3月〜2月となるので、2027/3/1以降を翌期として合計したいです。
>因みに、月別表示は書式設定によって月だけの表示となっていますが
>月も検収予定も西暦入力し統一しています。

 上記の逆で、当期分(A2〜A7)までの集計も範囲指定してFIRTER関数で結果は求められるでしょうか。
他の関数と組み合わせることになりますか?
いろいろ試してみましたが、どうもうまくいきません…。
アスタリスクで何個も組み合わせる方法になりますか?
そうであれば、やはりSUMIF関数を使った方がコードが短くて済むのでしょうか。

 せっかく新しいことを教えていただいたのでFIRTER関数を使ってみたいと思いましたが、結局どちらを使うのが最適なのかと悩みます。

(ひさちゃん) 2026/09/25(金) 11:53:03


>当期分(A2〜A7)までの集計も範囲指定してFIRTER関数で結果は求められるでしょうか。
FILTER関数は、条件に合うデータだけを抽出する関数なので当期分(A2〜A7)までの集計は行えません。
=SUM(A2:A7)と範囲指定します。

>FILTER関数の前にSUMを付けているのは数字として扱う為ですか?
SUMは合計する関数です。数字を扱う関数は別に用意されています。

>結局どちらを使うのが最適なのかと悩みます。
条件があるかないかによって使用する関数も違ってきます。

月別売上実績 これが条件有り =SUM(FILTER(B14:B20,C14:C20>A7)) 関数を組み合わせて条件に一致するものだけ合計
               =SUMIF($C$14:$C$20,A2,$B$14:$B$20) 条件に一致するものだけ合計
当期分(A2〜A7) 条件なし =SUM(A2:A7)

(関数苦手) 2026/09/25(金) 14:35:24


(関数苦手)様

 コメントありがとうございます。
>FILTER関数は、条件に合うデータだけを抽出する関数なので当期分(A2〜A7)までの集計は行えません。
A2〜A7セルすなわち9月〜2月の数字の合計は受注予定の表からは拾えないんですね…
3月以降(翌期)の集計が出来たので何かしら出来るのかと思いました

 >>FILTER関数の前にSUMを付けているのは数字として扱う為ですか?
>SUMは合計する関数です。数字を扱う関数は別に用意されています。
これについては私が早とちりして書き込んでしまっただけ下記の通り次の書き込みをしております。
>分かっちゃいました。該当セルを合計するためですね?

 >当期分(A2〜A7) 条件なし =SUM(A2:A7)
これはどういうSUM関数なのでしょうか。
範囲指定…スイマセン。どう使うのかよく分かりませんでした。

(ひさちゃん) 2026/09/25(金) 16:37:33


>これはどういうSUM関数なのでしょうか。
「SUMは合計する関数です。」と言っておきましたけど。
「>分かっちゃいました。該当セルを合計するためですね?」と言っておきながらなぜそのようなことを言うのでしょうか。

>当期分(A2〜A7)までの集計
=SUM(A2:A7) セル範囲が違っていました。
このような場合は臨機応変に対応する力を付けてください。

[月別売上実績] 売上  受注済み
    上期計 250,000  565,000

売上 B8=SUM(B2:B7)
受注済み C8=SUM(C2:C7)

提示されている表を見るとこの様になります。
そうじゃないというのなら「当期分(A2〜A7)までの集計」がどうなればいいのか
説明してください。

(関数苦手) 2026/09/25(金) 17:46:32


 2〜7行は集計結果なのでそっちじゃなくて 14〜20行の中で
 2月以下を抽出するには って話だと思いますよ

 比較演算子 を調べたらいいと思います。

 excelの独特な表記である<>を知っているので見たことあるでしょうし。
(ちくわ) 2026/09/25(金) 22:20:41

(ちくわ)さん補足有難うございました。
「当期分(A2〜A7)までの集計も」はそういうことだったんですね。

(関数苦手) 2026/09/25(金) 17:46:32 はスルーしてください。

(関数苦手) 2026/09/26(土) 09:27:24


 質問者さんへ
 別スレッドの件、最終的な受け止めを書いていただきました。お疲れさまでした。
 2日ほど自宅を離れていましたので、コメントできませんでした。

 今回のスレッドの回答ですが、少し配慮が足りませんでした。
 SUM+FILTERもありますが、この場合はSUMIFが適切です。(SUMIFSというのもあります)
 速度的にも分かり易さからもSUMIFが適切でした。
 ミスリードしてしまい済みません。 
(xyz) 2026/09/26(土) 14:38:02

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.