SUMIFとIFの組み合わせ方

このQ&Aのポイント
  • SUMIF関数で合計する条件と範囲を変えたい場合について、IFとSUMIFの使い方を教えてください。
  • IF関数を使用して、B6かC6のどちらかに値が入っている場合に処理を行い、両方に値が入っているか値が入っていない場合は空欄とする式です。
  • 上記のIF関数に対して、SUMIF関数を使用して指定した範囲から合計金額を集計する式です。条件によって範囲が異なるため、SUMIF関数で条件と範囲を変える方法を教えてください。
回答を見る
  • ベストアンサー

SUMIFとIFの組み合わせ方

実際の関数のため、シート参照があり分かりにくくてすみません。 SUMIF関数で合計する「条件と範囲」を変えたい場合の質問です。 最初はSUMIFの中で条件を入力してみたのですが、そもそも以下にあるように真と偽だけでは、偽(それ以外の場合)はすべて計算されてしまうため、IFを用いて先に判断してからとおもったのですが、値が0のままです。 IFとSUMIFの使い方が解るかた教えていただけたら幸いです。 IFとSUMIF以外でも回答あればよろしくおねがいします。 【IFの元、B6もしくはC6に値が入っているなら処理をする、両方に値が入っているか値が入っていないなら空欄】 =IF(AND($B6<>0,$C6=0),"勘定",IF(AND($B6=0,$C6<>0),"項目","")) 【上記IFに対してSUMIFで必要な範囲から合計金額を集計】 =IF(AND($B6<>0,$C6=0),SUMIFS(入力【契約書】!$D:$D,入力【契約書】!$E:$E,$C6,入力【契約書】!$I:$I,D$3,入力【契約書】!$J:$J,D$4),IF(AND($B6=0,$C6<>0),SUMIFS(入力【契約書】!$D:$D,入力【契約書】!$C:$C,$B6,入力【契約書】!$I:$I,D$3,入力【契約書】!$J:$J,D$4),""))

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

>値が0のままです。 なってしまっている原因は質問者様が作られた =IF(AND($B6<>0,$C6=0),SUMIFS(入力【契約書】!$D:$D,入力【契約書】!$E:$E,$C6,入力【契約書】!$I:$I,D$3,入力【契約書】!$J:$J,D$4),IF(AND($B6=0,$C6<>0),SUMIFS(入力【契約書】!$D:$D,入力【契約書】!$C:$C,$B6,入力【契約書】!$I:$I,D$3,入力【契約書】!$J:$J,D$4),"")) という関数が、 AND($B6<>0,$C6=0) という条件では入力【契約書】!$E:$E列の値が$C6に等しい値、即ち0となっているもののみを合計する様になっていて、 AND($B6=0,$C6<>0) という条件では入力【契約書】!$C:$C列の値が$B6に等しい値、即ち0となっているもののみを合計する様になっているという、どちらの場合も条件範囲の値が0となっている行のみの合計を求める様な関数となっているからではないかと思います。  御質問の件ですが、条件式が AND($B6<>0,$C6=0) や AND($B6=0,$C6<>0) になっているという事は、B6セルやC6セルに入る値は必ず数値(或いは日時)データであると考えて宜しいのでしょうか?  もしそうなら以下の様な関数にされては如何でしょうか? 【IFの元、B6もしくはC6に値が入っているなら処理をする、両方に値が入っているか値が入っていないなら空欄】 =IF(COUNT($B6,$C6)=1,IF(SUM($B6),"勘定","項目"),"") 【上記IFに対してSUMIFで必要な範囲から合計金額を集計】 =IF(COUNT($B6,$C6)=1,SUMIFS(入力【契約書】!$D:$D,IF(SUM($B6),入力【契約書】!$C:$C,入力【契約書】!$E:$E),SUM($B6,$C6),入力【契約書】!$I:$I,D$3,入力【契約書】!$J:$J,D$4),"")

lseuguo2
質問者

補足

とても具体的な回答ありがとうございました。 「0を合計する式に」と言われてハッとしました。 AND($B6<>0,$C6=0)とAND($B6=0,$C6<>0)を交換したら取りあえず動いたので感謝です。 =IF(COUNT($B6,$C6)=1からも試してみました。 【IFの元、B6もしくはC6に値が入っているなら処理をする~】の説明が正しくなかったです、すみません。 ただしくは 【IFの元、B6もしくはC6に値が入っているなら、B6の場合はB6に必要な「範囲と条件を合計」、C6の場合はC6に必要な「範囲と条件を合計」】 としたいのですが、どうも書式が長くなってしまって良くない気がします。 でもこの場合IFを重ねていくしかないでしょうか?

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

>B6もしくはC6に値が入っているなら処理をする、 >両方に値が入っているか値が入っていないなら空欄 >=IF(AND($B6<>0,$C6=0),"勘定",IF(AND($B6=0,$C6<>0),"項目","")) 基本的なIFの数式の構成は間違っていません。 これで数字が出ないのなら、 ●勘定の時(B列に数字が入っているとき)  SUMIFS(入力【契約書】!$D:$D,入力【契約書】!$E:$E,$C6,入力【契約書】!$I:$I,D$3,入力【契約書】!$J:$J,D$4) ●項目の時(C列に数字が入っているとき)  SUMIFS(入力【契約書】!$D:$D,入力【契約書】!$C:$C,$B6,入力【契約書】!$I:$I,D$3,入力【契約書】!$J:$J,D$4) というそれぞれのSUMIFSの数式の条件の与え方が、アナタの(ナイショの)シートの実態と合ってないせいです。 もう一度それぞれ落ち着いて、正しいSUMIFSの数式の条件を与えて計算してください。 上述で切り出したSUMIFSの部分だけを別セルに記入して、それぞれ意図した集計が出来ているか検算してみるのも良い方法の一つです。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.1

》 =IF(AND($B6<>0,$C6=0),"勘定",…) その式を入力するセル・アドレスは?

関連するQ&A

  • エクセル SUMIF関数

    SUMIFS関数で行き詰っています。ご教授願います。  A   B  C  D  ・・・AE AF AG・・・・・ 1    4月4月4月・・・・・・・・・・・・・5月・・・・←関数用 2    4/1 4/2 4/3・・・4/30 合計 5/1・・・6/30 3北海道 3  0  1 4東京  0  2  5 5東京  4  1  0 6神奈川 1  7  0 という表から下記の別表のように月毎・県毎の集計をしたいのですが、 現在は月毎に1列合計列を作成し、そこを使ってSUMIF関数で集計しています。 別表  A   B  C  D 1    4月 5月 6月 2北海道 4 3東京  12 4神奈川 8 合計行をなくし、SUMIFS関数で集計はできないものでしょうか? うまくいかない現在のSUMIFS関数は下記です。(恥ずかしい) SUMIFS(B3:XX6,A3:A6,別表A1,B1:XX1,別表B1) ※北海道 4月を集計 これでは「#VALUE!」です。 今まで通り月毎にSUMIFで集計するのは手間なので、どなたかご教授願います。

  • エクセル2003 SUMIFの組み合わせ

    A列| B列|  C列|D列 |    E列  |   F列 4| 2012/4/16| H| 100 |   4月の計 |  5月の計 4| 2012/4/17| J| 100 | 5| 2012/5/12| J| 100 | 5|  2012/5/13| H| 100 | 上の表でA列には=month(B2)の関数で月だけ表示するようにしています。 4月のJの合計と5月のJの合計をE列、F列に出すにはどう関数を組めばよいですか? 以下の様に組みましたが、どこが違うでしょうか? =IF(A:A=4,(SUMIF(C:C,"J",D:D)),"")-----4月計 =IF(A:A=5,(SUMIF(C:C,"J",D:D)),"")-----5月計 よろしくお願いします。

  • sumif関数とif関数と配列の使い方

    例えば、下記のように9行×3列のデータがあり、1列目が123かつ2列目がcであるものについて3列目を合計したいのですが(つまり300+600で900を算出する)、1セルに値を算出する方法があれば教えてください。 sumif関数とif関数と配列を使えばできそうな気がするんですが、やり方がよくわかりません。よろしくお願いします。 123  a  100 123  b  200 123  c  300 456  a  1000 456  b  2000 456  c  3000 123  a  400 123  b  500 123  c  600

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

    エクセル関数を良く使います。 今回行いたいのはJ28:J32の範囲の中でJ24より小さい値の行のI28:I32の合計の値というものです。 しかし、下記の様に入力すると「入力が正しくありません」と出てしまいます。 =SUMIF(J28:J32,<J4,I28:I32) 数式の場合は””で囲むとヘルプに出ているのですがそれだと<J24という文字として認識してしまうらしく、私の望むJ4より小さい値の行のI列の合計は出てきません。 この式の検索条件にセル番地とすうしくの組み合わせを入れてはいけないのでしょうか? 御存知の方教えて下さい。

  • 「SUMIF」と「AND」関数の組み合わせについて

    2つの表があり、A列の日付が同じでなおかつ表2のB列に「9」が入っているC列の合計数を表1のBに反映し、合計数が「0」なら""空白にしたい場合の関数の組み合わせを教えてください。日付が同じだけなら「SUMIF」と「IF」関数でできたのですが、なおかつ「9」が入っているセルの合計となると上手く反映されません。「AND」関数の使い方が悪いと思うのですが、どうかよろしくお願いいたします。

  • SUMIF関数で分からないところがあります。

    エクセルのSUMIF関数の例題で分からないところがあります。 =SUMIF(A:A,"<=&D2,B:B) A列に日付(2017/12/05,,2017/11/30など) B列に金額(500,100,300など) D列に末日(2017/11/30,2017/12/31など) が入力されています。 A列に入力された日数からD列の末尾までの合計を求めるプログラムだとお思うのですが、 なぜ、Dの前に&が付くのでしょうか? 教えてくださいよろしくお願いします。

  • ExcelのSUMIF関数についてです。

    ExcelのSUMIF関数についてです。 下記のような表を使用して、 商品コードが一致する商品数の合計をD2セルに入力したい。 (※A2,A3,A4...とA列の中でコードが一致したら、その数量の合計を出す)       A        B       C    D 1     商品コード  商品名   数量   計 2     PD0001    AAA     50 3     PD0019    BBB     20 4     PD0009    CCC     150 5     PD0001    AAA     1 6     PD1004    DDD     15 7     PD1027    EEE     50 8     PD0009    CCC     40 9     PD0019    BBB     30 :      :         :       : :      :         :       : sumif関数を使用して、 D2に =SUMIF(A:A,A2,C:C) を入力コピーすると     D     計 2   35 3    1 4   50 5   45 6    0 7    0 8    0 9    0  :    : :    : となってしまいます。     D     計 2   51 3   50 4   190 5   51 6   15 7   50 8   190 9   50  :    : :    : という出力にするにはどうしたらいいでしょうか? ちなみに、コードではなく商品名で D2に =SUMIF(B:B,B2,C:C) を入力コピーするとうまくいきます。 初歩的なことなのかもしれませんが、 商品コード数も数量もかなり膨大なものを計算するので困っています。 宜しくお願いします。

  • SUMIF関数で試行錯誤しています

    Excel2003です。 左表から選択範囲を決めて右表の[I3] A*を検索条件に 値[D5] +10と[D8] +5のAの荷姿だけの合計15を求めたい のですが、わかりません。=SUMIF(E3:E10,I3,D3:D10)で求めると -となる値も計算に含まれてしまい答えは、10になってしまいます。 右下表の[I9] C*を検索条件にした答えも-1になりますが、 これを0にできないかと考えています。 SUMIF関数と他の関数の組合せを使ってできるのではないかと いろいろ試行錯誤しているのですがわかりません。 ヒントだけでも良いので、お解かりの方いましたらよろしくお願いします。

  • エクセル2000にてSUM,SUMIF,IF関数のどれかを用いた集計方法

    エクセル2000にてA1 からA10列には1000円から2000円までの金額、B1からB10列にはA列の金額に応じた手数料が入力されているとします。関数を使用し金額が1200円から1700円における手数料の合計を求めるにはどのように入力したらよいでしょうか?SUM関数、SUMIF関数、IF関数のいずれかを使用した場合を教えてください。

  • EXCELのIF関数の入れ子について

    すみませんよろしくお願いします。 EXCELでセル(A1)~(L1)までに不特定の文字列が入力されており、(M1)に「もし(L1)が入力されていたら(L1)の値を表示、もし(L1)がブランクなら(K1)の値を表示、もし(K1)がブランクなら(J1)の値を表示、もし(J1)がブランクなら(I1)の値を表示・・・・」といった具合で関数を作成したいのです。また、(A1)~(L1)のセルで穴あき状態で入力されていた場合は最も(L1)寄りのセルを表示させたいです。 EXCEL2003のIF関数だと、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="","",E2),F2),G2),H2),I2),J2),K2),L2) で最後の(A1)までの入れ子を作ることができせん。 EXCEL2007を使用すると、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="",IF(D2="",IF(C2="",IF(B2="",IF(A2="","",A2),B2),C2),D2),E2),F2),G2),H2),I2),J2),K2),L2) と作成できます。 EXCEL2003で作成するいい方法はありますでしょうか? ご指南の程よろしくお願いします。

専門家に質問してみよう