- 締切済み
Excelで条件に合うデータをピックアップして合計を求めたい
下記のような条件で合計を求めたいのですが、 SUM関数やSUMIF関数では、求めている合計が得られません。 例) 行/列 A B C 1| No. 金額 氏名 2| 1 200,000 A 3| 1 200,000 B 4| 1 200,000 C 5| 2 150,000 A 6| 2 150,000 D 7| 3 180,000 B 8| 3 180,000 D 9| 3 180,000 E 10| 小計 上記のようなデータがあります。 B列には、Noごとに、それぞれ同じ金額が重複して入力してあります。 ここから、Noの最初の金額である200,000+150,000+180,000=530,000 という合計を10行目に求めたいのです。 現在は、自分でNoを確認しながら、その都度、 合計したいセルを選択して合計を求めているのですが、 データ数が多いため、何か別の方法がないかと思案しております。 どなたか、アドバイスの程、宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- 米沢 栄蔵(@YON56)
- ベストアンサー率36% (37/102)
u6_6uの意図が「特定のセルの値が、特定のセルより上方にいくつあるかを計算させ、個数が1個のセルの値を合計する。」と解釈し、回答します。 セルD1に次式を入力します。 =CountIf(B$1:B1,B1) セルD1をコピーして、D2からD9までに貼り付けます。 セルB10に次式を入力します。 =SumIf(D1:D9,1,B1:B9) D列を表示したくなければ、D列を右クリック→表示しない とします。
- imogasi
- ベストアンサー率27% (4737/17069)
これは配列数式でもできる。 (するとSUMPRODUCT関数でも出来る可能性が多い) しかし行数が多いと処理が重くなるかも。 作業列をつかい、該当行にサインを立て、そのサインを元にSUMIFするのが、普通のレベルの回答。 VBAででもやれば、比較的簡単に条件該当行の合計が出る。質問者のレベルが判らないので略。 配列数式では 例データ A1:C9 No. 金額 氏名 1 200,000 A 1 200,000 B 1 200,000 C 2 150,000 A 2 150,000 D 3 180,000 B 3 180,000 D 3 180,000 E 空きセルに 式 =SUM(IF(COUNTIF(OFFSET($A$2,0,0,ROW(A2:A9)-1,1),A2:A9)=1,B2:B9)) と入れて、Shift,CTRL,ENTERの3つのキーを同時押しする。 ツールーオプションー計算方法を自動にしておくほうがわかりやすい。 結果 530000 配列数式でも式に工夫の要る(OFFSETとROWを利用)タイプです。
- KURUMITO
- ベストアンサー率42% (1835/4283)
作業列を作らない場合でしたらB10セルに次の式を入力します。 =SUMPRODUCT((A2:A9<>"")/COUNTIF(A2:A9,A2:A9&"")*B2:B9)
- nattocurry
- ベストアンサー率31% (587/1853)
#2です。 =SUM(F2:F9) は間違いで、 =SUM(D2:D9) が正しいです。 失礼しました。
- nattocurry
- ベストアンサー率31% (587/1853)
作業列を使っても良いのなら、 D2セルに =IF(D2<>D1,D2,"") と入力して、それをD9までコピぺすれば、 =SUM(F2:F9) で求めることができます。 作業列(D列)が邪魔なら、D列だけ非表示にすれば良いです。 作業列を使わずに、難しい関数や数式を使って、スマートに求めることもできるとは思いますが、理解できなければ応用が利かなくなるので、まずは理解できる範囲でやってみましょう。
お礼
nattocurry様 早速のアドバイス、ありがとうございます。 列数がたくさんあるため、新たに作業列を作ることは難しいのですが、 この方法だと普段使っている関数で求めることができるので、 非常にわかりやすく、とても勉強になりました。 本当にありがとうございました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
作業列を作って対応します。 D2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(AND(ROW(A1)<=COUNT(A:A),COUNTIF(A$2:A2,A2)=1),B2+SUM(D$1:D1),"")) B10セルには次の式を入力します。 =MAX(D:D)
お礼
KURUMITO様 早速のアドバイス、ありがとうございます。 列数が多いため、作業列を追加することは難しいのですが、 教えていただいた数式で求めたい答えを得ることができました。 しかし、SUMPRODUCT関数を使ったことがなかったため、 どんなことができる関数なのか調べているうちに お礼をするのが遅くなってしまいました。 もう少し数式の意味を勉強しないと使いこなすことができませんが、 本当にありがとうございました。