Excelの関数で本来の答えとは異なる結果が出てしまう問題

このQ&Aのポイント
  • Excelの関数を使用して、特定の条件で集計を行う際に、本来の答えとは異なる結果が出てしまう問題が発生しています。
  • 求めたい式は、「a員であって、関東と関西以外の取引先」となります。
  • 前任者が使用していたSUMPRODUCT関数を引き継ぎつつ、できるだけ前年のデータに干渉しない方法を模索しています。
回答を見る
  • ベストアンサー

エクセルの関数(~以外)

http://okwave.jp/qa4938678.html にて質問させて頂いた者です。 また、ご存知の方がいらっしゃいましたら教えていただけたら幸いです。  A列 B列  C列  D列… 1 ID 部名 課員 取引先… 2 1  A   a   関西 3 2  A   c   関東 4 3  A   b   アメリカ 5 4  A   a   関東 6 5  A   a   中国 7 6  A   a   台湾 [シート名:入力]   A列  B列  C列 D列  E列… 1 地域   a   b  c   合計(←上記シート「入力」の課員) 2 関東   1   1  1   3 3 関西   1   0  0   1 4 その他  2(Q1)0  0   2 [シート名:合計] (Q1)=SUMPRODUCT(入力!$C$2:$C$7="a")-((COUNTIF(入力!$H$2:$H$7,"関東")+COUNTIF(入力!$H$2:$H$7,"関西"))) と入力すると、本来の答えは「2」のはずがマイナスと出てきてしまいます。 求めたい式は 「a員であって、関東と関西以外の取引先」です。 メインの取引先が「関東」と「関西」で、一方で海外の取引先が(この表からは伺えませんが…)あまりないのですが、地域が広く数が少ない(例えばアメリカ:1、タイ:1、といった具合)ので、「その他」という項目をたて、そこに全て落とし込みたいと考えています。 前任者のデータを引き継ぐ形となり、去年とは少し違う集計方法・データ抽出になるに伴い出てきた問題です。 前任者はSUMPRODUCT関数を多用しているので、できれば去年までのデータに干渉しないかたちでできるだけおおくの部分を引き継ぎたいと考えているのですが…何か良い方法があれば教えて頂ければ幸いです。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

> 「a員であって、関東と関西以外の取引先」 課員がC列、取引先がD列なら =SUMPRODUCT((入力!$C$2:$C$7="a")*(入力!$D$2:$D$7<>"関東")*(入力!$D$2:$D$7<>"関西")) です。

hanko-0301
質問者

お礼

早速のご回答、しかも簡潔にありがとうございます。また、列の解釈もして頂き、すみませんでした… 修正したつもりだったんですが、コピペをした部分が多少残ってしまいました…失礼しました。

その他の回答 (6)

回答No.7

すみません、シート名が間違っていました。 =COUNTIF(入力!$C$2:$C$7,"a")-SUM(合計!$B$2:$B$3) No.5さんが答えられているとおりです。

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

3条件の件数カウントか合計か、はっきりしないが 引き算をする必要はなくて、SUMPRODUCT関数の条件に組み込めば仕舞いではないのか。 実例の書き方がややこしくて、良く質問が読めてないが。 例データ A1:C7 課員 取引先 計数 a 関西 10 c 関東 8 b アメリカ 7 a 関東 6 a 中国 5 a 台湾 4 ーーー 式 =SUMPRODUCT((A2:A7="a")*(B2:B7<>"関東")*(B2:B7<>"関西")*(C2:C7)) 結果 9 aの中国と台湾を足している。 これでよいのでは。 ーーー 質問にミスリードされて混乱しちゃう。 >a員であって、関東と関西以外の取引先」です と言えば、取引先名を思っちゃう。 取引先らしいデータが無い。 「a員であって、関東と関西以外の取引先のXXを○○したい」とはっきりさせるべきでは。 また質問の例でシート名は上に書くのが適当(判り易い)と思う。 ーー a氏以外もいて、それの計数も出したいらしい。 であれば、C$2:$C$7="a"と具体的に(リテラルと言う)例だけではなく 総合的に質問しないといけないのでは。 下記の例の数字が入ってない段階の表を示し、そこに入れる式を 全般的に聞くべきだろう。 それは前の質問の時から言えることではないか。 ーー E列  F列  G列  H列 ーー a b c 関東 6 0 8 関西 10 0 0 その他 9 7 0 a,b,cと関東、関西(その他)は手入力しておく。 F2の式 =SUMPRODUCT(($A$2:$A$7=F$1)*($B$2:$B$7=$E2)*($C$2:$C$7)) H2まで式複写。 F2:H2の式をF3:H3まで式複写。 F4の式 =SUMPRODUCT(($A$2:$A$7=F$1)*($B$2:$B$7<>$E$2)*($B$2:$B$7<>$E$3)*($C$2:$C$7)) F4をH4まで式複写。 ーー このように出来るだけ式の複写で、正しい答えを出そうとすると、$の有無、$の場所が大切で、エクセルの相当の経験がいるのだ。

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

何を質問しているか不明ですし、回答もでていますので参考までに B4=COUNTIF(入力!$C$2:$C$7,B1)-sum(B2:B3) こんな感じで良いのでは

回答No.4

=SUMPRODUCT((入力!$C$2:$C$7="a")*(入力!$D$2:$D$7<>"関東")*(入力!$D$2:$D$7<>"関西")) 自分なら、 =COUNTIF(入力!$C$2:$C$7,"a")-sum(入力!$B$2:$B$3) とします。

hanko-0301
質問者

お礼

早速お返事いただきまして、ありがとうございました。 そうなんです、もしもSUMPRODUCT以外で出来れば・・と考えておりました。ただ、前任者のデータを引き継いだかたちで、その式がものすごく複雑(私の許容をこえてまして…)なものですから、新しい式などを打ち込んだりすると他の箇所でエラーがでてきてしまう場合がありました。 ただ、今回に限っては(今のところ)他の箇所でのエラーが出ていない様子なので、頂いた =COUNTIF(入力!$C$2:$C$7,"a")-sum(入力!$B$2:$B$3) で入力してみたのですが、なぜか正しい数値が出てきません(仮に、その数値をここでXとします)。 例えば =COUNTIF(入力!$C$2:$C$7,"a")-SUM(入力!$D$2:$D$7,{"関東","関西"}) という式も前述の式と同じ内容でしょうか?答えが同様にXとでてきたので。。。 反応が遅くなる、と伺いましたのでできればSUMPRODUCTから離れたいと考えているのですが、私の式の入力が間違ってますでしょうか。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

こういうことですか? H列をD列に直してあります。 =SUMPRODUCT((入力!$C$2:$C$7="a")*(入力!$D$2:$D$7<>"関東")*(入力!$D$2:$D$7<>"関西")) SUMPRODUCTを多用しすぎると、重くなりますし、判りづらくなりますよ。

hanko-0301
質問者

お礼

昨日に引き続き、今日もご回答、ありがとうございます。 そうなんです…反応が遅い、と思ったらやっぱりSUMPRODUCT関数は重いんですね、理由がわかりました。 この質問に関しては割りと他のデータとは影響を受けないところにあるようなので、他の方に教えて頂いたCOUNTIF等、を使ってみたんですが、データの干渉なのかそれとも私の入力が間違っているのか、正しい答えが導き出されません… ちなみに、打ち込んだ式は =COUNTIF(入力!$C$2:$C$7,"a")-SUM(入力!$D$2:$D$7,{"関東","関西"}) あるいは =COUNTIF(入力!$C$2:$C$7,"a")-SUM(入力!$D$2:$D$3) です。 お手数をおかけして、申し訳ありません。

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.1

こんにちは 例では取引先はH列ではなくD列になっているのでCOUNTIFへの検索範囲の与え方が違っている..ってことではないですよね(^^;

hanko-0301
質問者

お礼

早速のお返事、ありがとうございます。 そうでした…列が違ってましたね、気がつきませんでした。。。 実際の元のデータをそのまま載せるわけにもいかず、加工したかたちにデータはしたのですが、式はすべて修正し忘れてしまいました、申し訳ありませんでした。列はここに記載したもので、式の方が間違いということでご回答いただければ幸いです。

関連するQ&A

  • エクセル VBAで関数

    こんばんわ。いつもお世話になっております。 エクセルでデータを加工しているのですが、関数で加工するととても遅くなってしまうので なんとかVBAで作業できないかと模索中です。 Sheet1の、A列=取引先 B列=支店名 となっており、それが3,000行ほどあります。 Sheet2も、A列=取引先 B列=支店名 となっており、 Sheet1のC列に、Sheet1のA列のB列という支店が、Sheet2にあるか確認したいのです。 現在は、Sheet1のC列に、SUMPRODUCT関数でカウントさせているのですが、大変重いです。 ほかのSheetで、VBAを使って関数のような働きをさせている部分があります(前任者作成) そのように、なんとかVBAを使用したいのですが、なかなかうまく出来ません・・・。 どうか、お力を貸してください!! うまく説明できなくて、わかりづらかったらごめんなさい。 よろしくお願いいたします。

  • エクセルのCOUNTIF関数について

    エクセルのCOUNTIF関数について、というかCOUNTIF関数でよいのかどうかもよく分からないのですが、教えて下さい。 (1)まず、ワークシートのA列の1~100行目までの100マスを範囲として、数値を入力していくときに、仮に同じ数値を入力しようとしても、入力ができないようにしたいのです。 (2)次に、ワークシートのA列とC列のそれぞれ1~100行目までの合計200マスを範囲として、(1)と同じことをしたいのです。(つまりB列はとばして) (1)と(2)のようなことは可能でしょうか? お分かりの方がおられましたら、ぜひよろしくお願いします!

  • エクセルの関数(SUMPRODUCT?)

    ご存知の方がいらっしゃいましたら教えていただけたら幸いです。  A列 B列  C列  D列… 1 ID 部名 課名 都道府県… 2 1  A   a   北海道 3 2  A   c   大阪 4 3  A   b   東京 5 4  A   a   東京 6 5  A   a   福島 [シート名:入力]   A列  B列  C列 D列  E列… 1 地域   a   b  c   合計(←上記シート「入力」の課名) 2 北海道 2(Q2) 0  0   2(Q3)   東北 3 東京  1(Q1) 1  0   2 4 関西  0    0  1   1 [シート名:合計] (Q1)=SUMPRODUCT((入力!$C$2:$C$6="a")*(入力!$D$2:$D$6="東京")) で、地名を1つにしている場合は問題なく反映されています。 (Q2)★ここが一番聞きたいところです★ =SUMPRODUCT((入力!$C$2:$C$6="a")*(入力!$D$2:$D$6="北海道")*(入力!$D$2:$D$6="青森")*(入力!$D$2:$D$6="岩手")*(入力!$D$2:$D$6="宮城")*(入力!$D$2:$D$6="秋田")*(入力!$D$2:$D$6="山形")*(入力!$D$2:$D$6="福島")) で、エラーがでてしまいます。(イヤミではないんですが…)東京など大きなところでは(1)の処理でよいのですが、例えばここだと北海道や青森、秋田…とあまりその都道府県だけでは数の少ないところは「地域」として「北海道・東北」とまとめたく、上の式では、 「aの課で、且つ北海道か、青森か、岩手か、宮城か、秋田か、山形か、福島であればカウントする」としたいのです。 ちなみに(2)の式を入力すると、エラーは出ないのですが該当するものがあるにも関わらずゼロ(2ではなく0)と表示されてしまいます。 (Q3)よって、本当であればここの関数も 「aの部で、且つaの課で、且つ北海道か、青森か、岩手か、宮城か、秋田か、山形か、福島であればカウントする」としたいところ、(2)でつまずいてしまっているため、E2のセルの表示「2」はそのシートのB2-D2のSUM関数で合計を出しているという状況です。 (3)は以上のような対処で問題はないかと思いますが、(2)の部分はどうしても表示されません。 前任者のデータを引き継ぐ形となり、去年とは少し違う形式になるに伴い出てきた問題です。できれば去年のものをできるだけ引き継ぎたいと考えているのですが…何か良い方法があれば教えて頂ければ幸いです。

  • エクセル関数を使ってシート1のC列にシート2の分類番号を入れたいのです

    エクセル関数を使ってシート1のC列にシート2の分類番号を入れたいのですが IF,VLOOKUP,COUNTIFなどでトライしましたがうまくいきません。 詳しい方に、ご教示願えましたら幸いです。どうぞ宜しくお願いいたします。 シート1のデータ A列に取引先番号、B列に品名およびほかの文字が混じっています。 シート2のデータ A列に取引先番号、B列に品名、C列に分類番号 尚、A列とB列は&検索条件、且つB列はあいまい検索になります。

  • SUMPRODUCT関数で0(ゼロ)と

    はじめまして。arumikan091と申します。 (Excel初心者です(^^;) ExcelのSUMPRODUCT関数について質問があります。 A B (1) 2 0 (2) 2 4 (3) 2 (空白) (4) 2 3 (5) 2 0 (6) 3 4 (7) 3 (空白) というシートの中で、 "A列が2で、かつB列が0の個数を数える" ということをしようと思い =SUMPRODUCT((A1:A7=2)*(B1:B7=0)) と入力したのですが、 これだとB列の0(ゼロ)と一緒に""(空白)も 数えられてしまうようです。 (上記シートだと式の期待値は2なのですが、 実際値は3が返ってきます) このような場合、0(ゼロ)だけを数えられる ようにするにはどのようにすればいいか 教えていただけたら幸いです。 一応、自分でも少ない知識の中で色々トライしてみて、 =SUMPRODUCT((A1:A7=2)*(B1:B7=0))-SUMPRODUCT((A1:A7=2)*(B1:B7="")) のように式を入力するとちゃんと0(ゼロ)だけを 数えてくれるようなのですが、さらに簡単な 方法がありましたら教えてください。 Windows ME、Excel2000です。 ※1 B列単独で =COUNTIF(B1:B7,0)とするとちゃんと 0(ゼロ)だけを数えてくれます。 ※2 一応既存のQ/A集で同じ質問がないか探しましたが、 (「SUMPRODUCT 空白セル」のANDで) 同様、類似の質問が既にありましたら 申し訳ありません。 長文失礼しました(m_ _m

  • エクセル関数SUMPRODUCTについて

    エクセル2000です。 A列とB列の和にC列を乗じたものの合計は、 =SUMPRODUCT(A1:A10,$C$1:$C$10)+SUMPRODUCT(B1:B10,$C$1:$C$10) または =SUM(SUMPRODUCT(A1:A10,$C$1:$C$10),SUMPRODUCT(B1:B10,$C$1:$C$10)) のような長ったらしいものになるのでしょうか? =SUMPRODUCT((A1:B10)*C1:C10) は、表中に文字列が入る場合があるのでエラーになります。 ご教示いただければ幸いです。

  • エクセル関数で重複チェック

    エクセル2010です。 ワークシートのB10:B17の範囲に数値(1から200くらいの自然数)が入力されます。 この範囲が空白になることはありません。 この範囲内での重複(同じ数値の入力)をチェックしたいのです。 ただし、1は何個あろうが重複に含めません。 となりの列あたりを作業列にして、COUNTIFでもできますが、1個のセルで完結させたいと思います。 まず、1を超える数値の個数を取得し、そこから1を除く数の種類の数を引いて0になれば重複はないのではないかと思い、下記の数式を書いてみました。これでTRUEなら重複はないと思いますが、もっと簡単な方法があるのではないかと質問いたしました。 よろしく願いします。 =COUNTIF(B10:B17,">1")-(SUMPRODUCT(1/COUNTIF(B10:B17,B10:B17))-(COUNTIF(B10:B17,"=1")>0))=0

  • エクセル 関数

    エクセル画面です       A     B     C 1 2     C 3    =Sheet1!B3 4    =Sheet1!B4 5    =Sheet1!B5 6    =Sheet1!B6 現在の画面は Sheet2 であってSheet1のB列のデーターを 読み込んでいます。このB列をC列に変更したい場合は、編集→ 置換で行いますが、セルA2にCを入力することでA3からA6 の式のB列をC列に置換え出来ないでしょうか

  • エクセルのCOUNTIFについての質問です

    エクセルに関して質問です COUNTIFがうまく使えず困っているので助けてほしいです。 下記のような表を作成し、別シートでカウント結果を反映させたいのですがうまくいきません    A   B   C  1 11:00 13:00 2:00  2 10:00 15:00 5:00  3 12:00 14:00 2:00 A・B列には数値を、C列には(B列-A列)の数式を入力し書式設定h:mmで表記されるようにしてあります。 別シートでC列の2:00の数をCOUNTIFで数えたのですが帰ってくる数字が明らかに少なく計算が合いません。 このような場合どのように対処すればちゃんとカウントされるのでしょうか? ご回答宜しくお願い致します。

  • エクセル SUMPRODUCT関数について教えてください

    エクセルで作成した表から ○○かつ●●のデータ個数を求めたく、 SUMPRODUCT関数を こちらで調べておりましたが どうしても解決しない部分があります。 どうぞ よろしくお願いいたします。 下記8桁数字は、日付です。 カウントしたい数は、B列(終了)が、A1セルに入力された年月かつ、区分(C列)が「A」の数です。 =SUMPRODUCT((LEFT(B2:B100,6)=A1)*(C2:C100="A")) こちらで、『B列=A1セル かつ C列="A"』のみのカウントは出来たのですが、 終了延長(D列)が空欄でない場合は、D列日付データの方をカウントする。 早期終了(E列)が空欄でない場合は、D列・B列よりも E列を優先し、カウントする。という条件を付けたいのですが、 Sheet1 A1セルに「200810(数を調べたい年月を入力)」 (開始)  (終了)     (区分)  (終了延長)  (早期終了)  A列     B列      C列     D列      E列 20061001   20081001   A    -        - 20070926   20081020   A    -        - 20071102   20081009   A    20081201    - 20080101   20081013   B    -        - 20080208   20081010   A    -        20080210 ・・・ この場合、「2」となるようにです。 IF、OR関数あたりかな と考えておりますが、SUMPRODUCT関数のどの部分で条件付ければ良いか解りません。 説明下手で大変申し訳ございませんが、ご助力いただければ幸いです。 

専門家に質問してみよう