• ベストアンサー

SUMPRODUCT 複数条件設定で、計算式結果がおかしいです。

下記のような表があったと仮定します。   A  B   C   D 1 月度 店舗 品目 売上金額 2 4   A   あ  22300 3 4   B   あ  18700 4 4   C   あ  14500 5 4   A   い  17950 6 5   B   あ  44000 7 5   C   い  35000 8 5   A   う  12000 9 5   B   い  13400 この表から、 店舗「A」、品目「あ」の売上合計は、22300になり、 数式「=SUMPRODUCT(($B$2:$B$9="A")*($C$2:$C$9="あ")*$D$2:$D$9)」で計算できます。 店舗「A,B」、品目「あ」の売上合計は、85000になり、 数式「=SUMPRODUCT(($B$2:$B$9={"A","B"})*($C$2:$C$9="あ")*$D$2:$D$9)」で計算できます。 店舗「A」、品目「あ,い」の売上合計は、40250になり、 数式「=SUMPRODUCT(($B$2:$B$9="A")*($C$2:$C$9={"あ","い"})*$D$2:$D$9)で計算できます。 しかし、 店舗「A,B」、品目「あ,い」の売上合計は、116350なのですが、 数式「=SUMPRODUCT(($B$2:$B$9={"A","B"})*($C$2:$C$9={"あ","い"})*$D$2:$D$9)」では、数値がおかしく(35700に)なります。 数式の使い方が間違っているのでしょうか? アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

「A」が「あ」と、「B」が「い」の合計ですね。 こちらの数式の原理 http://miyahorinn.fc2web.com/faq/faq100.html SUMPRODUCTとか配列関数とかを熟知してませんので、もっとましな方法があるかも知れませんけど、、、 =SUMPRODUCT(($B$2:$B$9={"A","A","B","B"})*($C$2:$C$9={"あ","い","あ","い"})*$D$2:$D$9) とか。

makekin
質問者

お礼

紹介していただいた数式で、答えは求めることができました。 なぜそうなるのかは理解できていないため、これから勉強していきます。 今回はありがとうございました。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんにちは。 #5の回答者です。 >いろいろな方法があるのですね。 >なぜそうなるのかは理解できていないため、これから勉強していきます。 ちょっと思うことですが、いくつかの方法は、掲示板ならではの回答だと思います。 掲示板の回答って、省スペースなものになる傾向が強いようです。 ただ、やっぱり >補助列を使って、 > >E2: ~下へ >=AND(OR(B2="A",B2="B"),OR(C2="あ",C2="い")) > >=SUMIF($E$2:$E$9,TRUE,$D$2:$D$9) の方法が、オーソドックスではないでしょうか? 自分の書いたものでも、後で読みきれない数式がありますから、納まりの良さというものは、実務でも、必ずしも必要ないと違いますか?

makekin
質問者

お礼

わざわざ補足ありがとうございます。 確かに理解していない数式を使うと後々、苦労するかも知れませんね。 補助列の場合は、後から見ても判りやすいので状況に応じて、 使い分けしようと思います。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 ---------------------------------- 1. データベース関数なら、 DataBase: =$A$1:$D$9 Criteria: =$H$1:$I$5 H   I 店舗  品目 A    あ B    い A    い B    あ D1: (念のため) 売上金額 =DSUM(database,D1,Criteria) ---------------------------------------- 配列数式なら、 =SUMPRODUCT(($B$2:$B$9&$C$2:$C$9={"Aあ","Aい","Bあ","Bい"})*$D$2:$D$9) 複雑になると、ミスが多くなりそうです。 ---------------------------------------- 補助列を使って、 E2: ~下へ =AND(OR(B2="A",B2="B"),OR(C2="あ",C2="い")) =SUMIF($E$2:$E$9,TRUE,$D$2:$D$9) という式でもよいと思います。 -----------------------------------------

makekin
質問者

お礼

いろいろな方法があるのですね。 なぜそうなるのかは理解できていないため、これから勉強していきます。 今回はありがとうございました。

回答No.4

($B$2:$B$9={"A","B"})という式が返す結果は {TRUE,FALSE;FALSE,TRUE;FALSE,FALSE;TRUE,FALSE;FALSE,TRUE;...} という2列の配列になります。これを踏まえて、 ($C$2:$C$9="あ")という式は {TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE;FALSE} という1列の配列なのですが、それでは計算出来ないので列数の一番 大きな配列に揃えて {TRUE,TRUE;TRUE,TRUE;TRUE,TRUE;FALSE,FALSE;TRUE,TRUE;...} と扱います。これが2番目と3番目の式で一見or条件での計算が成り 立っていた理由です。 ここで、($B$2:$B$9={"A","B"})*($C$2:$C$9={"あ","い"})とすると {TRUE,FALSE;FALSE,TRUE;FALSE,FALSE;TRUE,FALSE;FALSE,TRUE;...} と {TRUE,FALSE;TRUE,FALSE;TRUE,FALSE;FALSE,TRUE;TRUE,FALSE;...} のANDになるので、結果はpapayukaさんやimogasiさんの喝破したと おり、(A and あ) or (B and い)だけがTRUEになってしまいます。 というわけで、中括弧は配列の記述だと決まっているのにor条件の つもりで使うのは危険であることの解説でした。解決法は、他の回 答者の皆さんがおっしゃるとおり、マジメにor条件を評価していく ことですね。

makekin
質問者

お礼

なぜだめか、詳しく回答していただきありがとうございます。 この手の、複数列の配列数式についてのサイトがありましたらご紹介をお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>店舗「A,B」、品目「あ,い」の売上合計は この意味があいまいでしょう。質問者には判っているが、一般的に、こう書いても判らない。文章で正確に表現すべし。 ただ合計116350だと質問者が言うので、それに当たる組み合わせを、回答者が探さないといけない。 "→第2条件 ↓第1条件" あ い う A ○ ○ ✕ B ○ ○ ✕ C ✕ ✕ ✕ らしい。 ーー 配列数式でやると =SUM(IF(((B2:B9="A")+(+B2:B9="B"))*((C2:C9="あ")+(C2:C9="い")),D2:D9)) と入れて SHIFTとCTRKとENTERキーを押す。 結果 116350 ーーー SUMPRODUCTの書き方に書き換えると =SUMPRODUCT(((B2:B9="A")+(+B2:B9="B"))*((C2:C9="あ")+(C2:C9="い"))*(D2:D9)) 結果 116350 両方とも「+」は「または」の場合に使う。「*」は「および」の意味で使うのは、ご存知でしょう。 {"A","B"}は確かに両方の要素について行うことになると思うが、 なぜダメなのか、小生の知識が整理できていないので、自分流の回答をとりあえず出す。 選択条件A,Bなどの項目数が多いと、そういう表現ができればよいですが。

makekin
質問者

お礼

>この意味があいまいでしょう。質問者には判っているが、一般的に、こう書いても判らない。文章で正確に表現すべし。 申し訳ありません。今後の教訓にいたします。 >両方とも「+」は「または」の場合に使う。「*」は「および」の意味で使うのは、ご存知でしょう。 そうなんですか?知りませんでした。これから勉強して理解します。 今回はありがとうございました。

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.2

No1さんが回答していますので理由については略 こんな方法でも =SUMPRODUCT((($B$2:$B$9="A")+($B$2:$B$9="B"))*(($C$2:$C$9="あ")+($C$2:$C$9="い"))*$D$2:$D$9)

makekin
質問者

お礼

こちらも同様に紹介していただいた数式で、答えは求めることができました。 なぜそうなるのかは理解できていないため、これから勉強していきます。 今回はありがとうございました。

関連するQ&A

  • SUMPRODUCTとワイルドカード

    こんばんは。 <例>     A     B   C    (D) 1 北海道  500  100  =B1*C1 2 青森県  400  150  =B2*C2 3 新潟県  200  200  =B3*C3 4 東京都  200  100  =B4*C4 5 沖縄県  250  100  =B5*C5              合計=SUM(D1:D5) 作業列(D列)を作らず合計を求めるには、 =SUMPRODUCT(B1:B5,C1:C5) でできると思います。 ただ、ここに「県のみ合計」という条件が入った場合について質問します。 例のように作業列(D列)を作り、SUMIFですれば簡単にできるのですが、「作業列を作らず、SUMPRODUCTとワイルドカード(*県)を使って」数式を組み立てるにはどうすればいいのでしょうか? ステップ(D列)を踏まず、ひとつの数式だけで完結したいのです。 試行錯誤していますが、簡単そうなのになかなかうまくいきません…。 D1=COUNTIF(A1,"*県")で以下オートフィルコピーし、 =SUMPRODUCT(B1:B5,C1:C5,D1:D5) とすればできますが、結局作業列(D列)を作ってしまっていますし…。 あと…たとえば最初に示した数式なら、 =SUMPRODUCT((B1:B5)*(C1:C5)) という数式の組み方を回答でよく見かけますが、 =SUMPRODUCT(B1:B5,C1:C5) =SUMPRODUCT(B1:B5*C1:C5) としないのは、何か意味の違いがあるのでしょうか? お詳しい方よろしくお願いします。 Vista Excel2007です。

  • エクセル SUMPRODUCT関数でこんな場合は?

    Excel2000です。 添付画像のような表があります。 A列、B列に数値、C列に文字列です。 A列の数値は単なる数値ではなく、計算式で求められています。 したがって表内A列の何も表示されていないセルは、計算の結果 ="" になったものです。 B列の数値は直接入力した単なる数値です。 この表で仮に、C列がAの場合のA列合計を求めるため、D6に =SUMPRODUCT((A1:A5)*(B1:B5)*(C1:C5="A")) としてみましたが、="" を乗じているためVALUEエラーになります。 =""を排除しようと、 =SUMPRODUCT((A1:A5<>"")*(A1:A5)*(B1:B5)*(C1:C5="A")) としてみましたが、やはりVALUEエラーになります。 こういう場合はどうしたらよいのでしょうか? ="" を =0 に変えるという回答以外でお願いいたします。

  • SUMPRODUCT関数 文字列を含んだ複数条件

    いつもお世話になっております。    A    B     C    D 2  1    4     4     4 3  2     2     2     4 4  3     -    -     - B列が4以上かつC列が4以上かつD列が4以上のA列の合計を出したいのですが、 =SUMPRODUCT((B2:B4>=4)*(C2:C4>=4)*(D2:D4>=4)*(A2:A4)) というようにすると、「4」と出てしまい、どうもうまく計算されません。 「-」が4以上に反応してしまい、どうしたらよいでしょうか? どうぞ宜しくお願い致します。

  • SUMPRODUCT関数について

    問合せ内容が不十分で申し訳ありません。 既にB1セルに下記の数式を入力し、結果90と表示されております。 =SUMPRODUCT((LEFT('A1:A5,1)="s")*C1:C5) 上記の計算式にsまたはdの場合、C1からC5の合計を 求める計算式のご教授をお願いいたします。 A5の値はdc以降もあります。

  • 縦列の計算(SUMPRODUCT?)

    初心者です。どうか助けてください!   A   B   C          ・・ L       1 名前 単価  1日の売り上げ   ・・・10日の売り上げ 2 ああ  200  2 3 いい  100  1 4 (空白)   5 ええ  150  4  ― ― ― ― 6 (日々売上) 1100 ・・・           というような表を作りたいのですが(A、Bは他のシートからVLOOKUPで飛ばしています。)うまくいきません。 びっちりと詰まった表であればSUMPRODUCTでOKのようですが、どうしてもうまくいかないのです。どうしても空白の行ができてしまうので・・・ どうしたらうまくいくのでしょうか??

  • 複数条件での期間範囲指定について

    A列   B列    C列   D列 木村 2012/4/1 りんご 100 佐藤 2012/4/1 バナナ 100 木村 2012/4/2 バナナ 200 小林 2012/4/2 りんご 150 佐藤 2012/4/12 りんご 150 木村 2012/4/15 りんご 200 木村 2012/4/30 りんご 100 佐藤 2012/4/30 バナナ 150 上記の表で、 木村さんのりんごの売上を求めるのであれば、 SUMPRODUCTを使用し、下記のような数式にしていました。 =SUMPRODUCT((A1:A8="木村")*(C1:C8="りんご")*D1:D8) これに期間指定を入れた場合の数式はどのようになるか分かりません。 例えば2012/4/15~2012/4/30の木村さんのりんごの売上はどのように求めるのでしょうか? よろしくお願いいたします。

  • この表を自動で計算したいです。

    まず表の形式ですが、下記のようになっています。   A列     B列   C列 1 日付     金額    品目 2 2004/11/4   1234   仕入れ 3 2004/10/29  5678   経費 4 2004/11/15   484   雑費 5 2004/10/18  2334   経費 6 2004/11/6   1450   交通費 7 2004/12/1    34   仕入れ 8 2004/11/23  3333   仕入れ A列の日付はランダムで並んでおります。 行いたいことは 【2004年5月の経費の総額を自動計算で算出】です。 今まですと、C列の品目を無視して期間での金額の合計値を出してました。 その時の計算式は =SUMPRODUCT((YEAR(A2:A498)=2004)*(MONTH(A2:A498)=5)*B2:B498) です。 今回は条件にC列の品目加えたいのですがどうしても出来ません。 ご指導を御願いします。

  • SUMPRODUCTについて

    A~Dのデータがすべて一致したらE列を合計する関数をつくりました。 C列にはVLOOKUP関数が入っており、合計のE列にもただの足し算が入っております(#N/Aと出てるデータもあります)。 別シートに =SUMPRODUCT((マスター!A2:A100="10A")*(マスター!B2:B100="H")*(マスター!C2:C100="A5")*(マスター!D2:D100=8)*マスター!E2:E100) と入れたら#N/Aと出ます。 条件範囲のエラー値をどうにかしなければだめなのでしょうか? それとも根本的に数式が間違ってるのでしょうか? よろしくお願いいたします。

  • 複数条件の設定(EXCEL)

    次のような表を作っています。 A列     B列    C列      D列 営業担当  金額  サポート担当  金額  Aさん   ○○円  Dさん     ○○円  Bさん   ○○円  Eさん     ○○円  Cさん   ○○円  Fさん     ○○円  Aさん   ○○円  Fさん     ○○円  Bさん   ○○円  Dさん     ○○円 「C列がFさんで、A列がAさんかBさんの場合、D列を返す」 というものです。 SUMPRODUCTを使ってやってみたのですが、良くわかりません。 回答よろしくお願いします。

  • 【Excel】 複数条件の合計

    A   B   C 1 8/1  ア  1,000 2 8/3  イ  2,000 3 8/2  エ  1,000 4 8/5  ア  3,000 5 8/3  オ  4,000 6 8/5  イ  1,000 ・ ・ Aに日付、Bに項目、Cに金額という 上の様な表があります。 D1 に 本日の 項目 ア の 合計金額を出す場合の 数式を教えてください。

専門家に質問してみよう