出産前後の痔にはご注意!

エクセル2003です

ネットで検索したら横に複数条件がある場合は、SUMPRODUCTなどを使うといいというのはわかったのですが
縦に複数条件ある場合は、SUMIFで足してくしかないのでしょうか?

例えば
A列      B列
果物     個数
みかん   3
りんご   2
バナナ   1
りんご   2
みかん   5

D2 りんご
D3 みかん

と言うデータがあり

みかんとりんごだけの合計値がほしい場合は
=SUMIF(A:A,D2,B:B)+SUMIF(A:A,D3,B:B)
でもとめられますが、
もっと簡素化したいです。
(あまり「+」は使いたくない)

SUMIFをまとめられますか?
もっと効率のいい関数があれば教えて下さい。
よろしくお願い致します。

「縦に複数条件がある場合の合計値」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (3件)

 Excel2007以降でしたら、ANo.1様の仰る様に



=SUMPRODUCT(SUMIF(A:A,D2:D3,B:B))

でも大丈夫ですが、Excel2003の場合は、

=SUMPRODUCT(SUMIF(A:A,D2:D3,B:B)*1)

という具合に、

*1

が必要になるかも知れません。(私の勘違いでしたら申し訳御座いません)

 それから、次の様な関数とすれば、D列に入力する条件の数が増えても、関数を書き替える必要がありません。
【条件が98個以下の場合】

=SUMPRODUCT(SUMIF($A:$A,$D$2:$D$99,$B:$B)*1)


【条件の数が定まらない場合】

=SUMPRODUCT(SUMIF($A:$A,$D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1)),$B:$B)*1)

 尚、考え難い状況ではありますが、条件の数が数千個以上にもなる場合には、計算処理に要するパソコンの負荷が過大になり、結果が表示されるまでに要する時間が長くなります。


 それから、御質問文の下に添付されている画像を拝見した処、E2セルには

SUMIF(A:A,D2,B:B)

という関数が入力済みの様に思えるのですが、それでしたら、SUMPRODUCT関数を応用した関数や

=SUMIF(A:A,D2,B:B)+SUMIF(A:A,D3,B:B)

という関数を使わずとも、

=SUM($E:$E)

で事足りると思うのですが、如何でしょうか。


 因みに、E2以下に入力する関数は、次の様に発展させておいた方が、D2以下のセルに対して、切取り、削除、挿入等の編集を行っても、参照先が出鱈目になりませんので、便利です。

=IF(INDEX($D:$D,ROW())="","",SUMIF($A:$A,INDEX($D:$D,ROW()),$B:$B))
「縦に複数条件がある場合の合計値」の回答画像2
    • good
    • 0
この回答へのお礼

とても参考になりました。
*1がなくても大丈夫でした。
ありがとうございました。

お礼日時:2011/11/11 23:51

>もっと効率のいい関数があれば教えて下さい


ない。
+はORの意味で、この質問の場合は、意味的にORを示さないとならないので。
SUMPRODUCT関数でも
=SUMPRODUCT(((A1:A5="みかん")+(A1:A5="りんご"))*(B1:B5))
と+を使う。
>あまり「+」は使いたくない
個人的趣味だ。今後エクセルの関数を経験するとき、じっくり勉強してみて。
ーー
OR関数を使って作業列を作って
=OR(A1="りんご",A1="みかん")
=SUMIF(C1:C5,TRUE,B1:B5)
なってのも意味ないだろう。
ーー
=SUM(IF((A1:A5="りんご")+(A1:A5="みかん"),B1:B5,0))
を配列数式にするのも+を使うし意味無いだろう。
    • good
    • 0
この回答へのお礼

確かにそうですね。
ありがとうございました。

お礼日時:2011/11/11 23:51

効率がいいとは、計算速度なのか、オートフィルなのか、数式の短さなのか。

。。

>=SUMIF(A:A,D2,B:B)+SUMIF(A:A,D3,B:B)
で充分だと思いますが、
=SUMPRODUCT(SUMIF(A:A,D2:D3,B:B))
とすることは可能です。
    • good
    • 0
この回答へのお礼

SUMPRODUCT(SUMIF(A:A,D2:D3,B:B))
が欲しかった回答です!
ありがとうございました。

お礼日時:2011/11/11 23:50

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで条件に合うセルを横に合計する方法は?

エクセルで条件に合うセルを横方向に探し、

条件に合うセルがあれば、その条件に対応する別のセルを足していきたいのです。

データは添付した画像のように入力されていて、

最新状況の欄をその後ろに続くデータから探し出して表示させたいのですが、

「最新状況の支払日欄」はMAX関数で最新の日を表示させています。

「最新状況の支払額欄」は最新状況の支払日と同じ支払日の支払額を合計して表示したいのです。

例)社名1の「最新状況の支払額欄」には50000と表示させる

その方法がわからないので、教えていただきたいのです。

よろしくお願いします。

Aベストアンサー

添付図:
たとえばB3に
=SUMPRODUCT(($D$2:$H$2="支払日")*(D3:H3=A3), E3:I3)
以下コピー
のようにして計算できます。

ご自分のシートでの計算用に,直し間違えないようにくれぐれも注意してください。

#補足
危険を冒せば,単純に
B3:
=SUMIF(D2:H2,A3,E3:I3)
でも計算できます。
万一にも支払額に,「指定の日付と同じ値(例えば3月3日なら40,971円)」が入ってしまう事が絶対にないと言い切れるなら。


#参考
Excel2007以降を使っているなら,SUMIFS関数を使った方がもうちょっと簡単なのでお薦めです。式の立て方は,最初の式とだいたい似た具合でできます。
ご相談投稿ではご利用のソフト名は元より,ご利用のソフトのバージョンまでキチンと明記することを憶えてください。



#それで。
アナタのエクセルの何列何行に何が入ってるのかサッパリ判りませんので,その絵じゃ具体的な数式とか回答できないですよね。
SUMPRODUCTで計算できますよ,とだけ聞いてもムズカシイでしょ?
結局回答者が,わざわざ添付図のような説明を作るところからやらなきゃならない。これって回答者の仕事でしょうか。どう思います?

添付図:
たとえばB3に
=SUMPRODUCT(($D$2:$H$2="支払日")*(D3:H3=A3), E3:I3)
以下コピー
のようにして計算できます。

ご自分のシートでの計算用に,直し間違えないようにくれぐれも注意してください。

#補足
危険を冒せば,単純に
B3:
=SUMIF(D2:H2,A3,E3:I3)
でも計算できます。
万一にも支払額に,「指定の日付と同じ値(例えば3月3日なら40,971円)」が入ってしまう事が絶対にないと言い切れるなら。


#参考
Excel2007以降を使っているなら,SUMIFS関数を使った方がもうちょっと簡単なのでお薦め...続きを読む

QSUMIFS関数でOR条件を使いたい場合の関数

Excel2010を使用しています。
家計簿を作成しているのですが、SUMIFS関数でOR条件を使用したい場合どのように書けばよいでしょうか。

図は、明細と合計欄です。
ピンクのセルが円、それ以外はドルです。
合計欄のように、円とドルをそれぞれ分けて項目毎の合計額を出したいです。
セルE21のように、円の場合は「MUFJ」「ゆうちょ」ですので、MUFJとゆうちょのSUMIFS関数合計値を足しています。
これを、1行にまとめたいのですが、適切な関数はないでしょうか?
SUMIFSではOR条件が使えないようですので・・・・・・

明細行に円・ドルの列を追加すれば簡単なのですが、明細行の列はこれ以上増やしたくないので、できれば数式のほうで処理できればと思っています。

よろしくお願いいたします。

Aベストアンサー

例示のデータなら以下のような数式になります。

=SUM(SUMIFS($C$2:$C$14,$D$2:$D$14,{"MUFJ","ゆうちょ"},$B$2:$B$14,B21))

Q縦横の条件に合致した時に値を取得する方法

どなたかご存じでしたらご回答をよろしくお願いします。

【質問】
 B1~ J1:1~9迄の値が入っています。A2~A11:A~J迄の値が入っています。
 それぞれの交点には任意の文字が入っています。
 A13にA~J迄の値を一つ、B13に1~9迄の値を一つ入力すると、上記の表を検索して
 合致した場合のそのセルの値をC13にセットする方法が知りたいです。

●表のイメージ
  1   2   3   4  5   6  7   8   9
A あ  か  さ   た  な  は  ま  や   ら 
B い  :   :   :   :   :   :   :   :  
C う   :   :   :   :   :   :   :   : 
D え  :   :   :   :   :   (9)   :   :
E お  :   :   :   :   :   :   :   :
F (1)  :   :   :   :   :   :   :   :
G (2)  :   :   :   :   :   :   :   :
H (3)  :   :   :   :   :   :   :   :
I (4)  :   :   :   :   :   :   :   :
J (5)  :   :   :   :   :   :   :   :

D 7  (9) <- D、7と入力すると交点の値:(9)を取得する。

●注意事項
  ・使用するエクセルは2010です。

以上、よろしくお願いします。

どなたかご存じでしたらご回答をよろしくお願いします。

【質問】
 B1~ J1:1~9迄の値が入っています。A2~A11:A~J迄の値が入っています。
 それぞれの交点には任意の文字が入っています。
 A13にA~J迄の値を一つ、B13に1~9迄の値を一つ入力すると、上記の表を検索して
 合致した場合のそのセルの値をC13にセットする方法が知りたいです。

●表のイメージ
  1   2   3   4  5   6  7   8   9
A あ  か  さ   た  な  は  ま  や   ら 
...続きを読む

Aベストアンサー

こんばんは!
INDEX関数とMATCH関数の併用で・・・。

表示したいセルに
=IFERROR(INDEX(B2:J11,MATCH(A13,A2:A11,0),MATCH(B13,B1:J1,0)),"")
としてみてください。m(_ _)m

QExcel MATCH関数で検索範囲内に同じ値の検索値が複数ある場合

MATCH関数で、検索した値が複数ある場合に1つしか出なくて困っています。
(例)
   A B C D
1 年月日 種類 番号 備考
2 4月1日 肉類 1
3 4月2日 野菜 2
4 4月3日 肉類 1
5 4月4日 果物 2
6 4月5日 野菜 1
7 4月6日 果物 3
8 4月7日 果物 2
9 4月8日 肉類 1

この表で、D9の備考の欄に「種類:肉類、番号:1」と同じものがあった時の日付を、新しい日付で取り出したいのです。

INDEX(A2:A8,(MATCH(B9,B2:B8,0)+MATCH(C9,C2:C8,0))/2)
としたのですが、本当は4月3日を取り出したいのですが、4月1日が出てきます。
どのようにしたら良いでしょうか?
Excel2003です。
よろしくお願いします。

Aベストアンサー

MATCH関数を使用しませんが、D9の書式を日付にして、
=MAX((A2:A8)*(C2:C8=1)*(B2:B8="肉類"))
と、入力してShift+Ctrl+Enterキーで入力完了してみてください(配列式になります)。

Qセル番号を返す関数

エクセルで、セル番号を返す関数はありますか??
セルの内容ではなくて、番号です。(A1、B3など)
調べてみましたがなかなか見つからなかったので、
わかる方教えてください。
宜しくお願い致します。

Aベストアンサー

文字として"C4"を返す。
=ADDRESS(ROW(C4),COLUMN(C4),4)

式を入力したセルの位置を文字列で返す。
=ADDRESS(ROW(),COLUMN(),4)

ADDRESSの3つ目の引数を変えると
$C$4
$C4
C$4
C4
の4つの形に出来ます。

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m

QSUMIF関数で、「ブランク以外を合計」を指定したい

SUMIF(範囲,検索条件,[合計範囲])
の、検索条件部分に、
「セル内に数字、文字をとわず、とにかく何か入力されていたら合計する」
といった意味合いの条件を指定したいのですが、その方法がわかりません。

画像で説明させていただくと、
A2のセルにSUMIF関数を用いて、
文字が入力されているc,d,e列の数値を合計し、
90という結果が欲しい、ということです。

どなたかご教授をお願いいたしますm(__)m

Aベストアンサー

こんばんは。

なんか皆さん難しく考えすぎのような・・・
SUMIF関数でできますよ。検索条件を空白以外とすればいいだけです。
=SUMIF(B2:F2,"<>",B1:F1) でできます。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Qvlookup関数で検索値を含む文字列を検索する方法

vlookup関数で例えば E1のセルに=vlookup(D1,A:C,3,false)とした場合、D1が佐藤であれば、A列に「佐藤」がある場合には当然、「佐藤」がある行の3列目の値が返されますが、「佐藤」はなく「佐藤A」や「A佐藤」がある場合にもこれらがある行の値を返して欲しいのですが、いい方法はありませんでしょうか。*を使ってできると思ったのですがうまくいきません。上記例で、=vlookup("*佐藤*",A:C,3,false)とすればできますが、*佐藤*の部分はD1の引用を利用したいのです。
 よろしくお願いします。

Aベストアンサー

=VLOOKUP("*"&D1&"*",A:C,3,FALSE)

Q前年比の%の計算式を教えてください

例えば前年比115%とかよくいいますよね?

その計算の仕方が分かりません・・・
例えば 前年度の売り上げ2.301.452円
    今年度の売り上げ2.756.553円
の場合前年比何%アップになるのでしょうか?計算式とその答えを
解りやすく教えて下さい・・・
バカな質問でゴメンなさい(><)

よろしくお願いします。

Aベストアンサー

 
(今年の売上÷前年の売上×100)-100=19.8%の売上増加

 


人気Q&Aランキング