• ベストアンサー

SUBTOTAL関数の不思議

SUBTOTAL関数で期待する合計が出せません。 A列   B列   C列   D列 品名   数量   単価   金額 A     1    100    100 B     2    200    400 C     3    300    900 小計               0 →ここが期待どおりでない D2セルの式は =IF(A2="品名",SUBTOTAL(9,INDIRECT("D$2:D"&ROW()-1)),B2*C2) でD5までコピーしました。 つまりA列が"小計"でないときは数量×単価を、"小計"と入力されていたらD2:D4をSUBTOTALで集計するつもりなのに結果が0になってしまいます。 ちなみにD5に =SUBTOTAL(9,D2:D4) と手入力しても結果は0でしたが、D列に金額を直接入力すれば小計は正しく表示されます。 理由がおわかりの方、教えてくださいませんか

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

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

こんにちは。 もともと、SUBTOTALは、その計算範囲の中の数式に、SUBTOTALを感知すると、それを計算しないという特性を持っています。 =IF(A2="品名",SUBTOTAL(9,INDIRECT("D$2:D"&ROW()-1)),B2*C2) それと、その式は「品名」ではなく、「小計」だとは思いますが、こういう統一式で、フィルダウンで、コピーしようとしても、そのような計算は使えません。 たとえばこのようにするには、 品名  数量  単価  金額 A    1  100    100 B    2  200    400 C    3  300    900 小計          1,400 E    4  200    800 D    4  300   1,200 E    3  400   1,200 F    2  500   1,000 小計          5,600 (ただし累計です) 統一式で行おうとするなら、 D2に、 =IF(A2="小計",TEXT(SUM($D$1:D1),"#,##0"),B2*C2) のようにして、D列を右揃えにして、フィルでドラッグコピーしてあげないと出来ません。 本来は、小計の部分にのみ、SUBTOTAL(9,...) を使います。

concatena
質問者

お礼

回答ありがとうございます。またお察しのように =IF(A2="品名",SUBTOTAL(9,INDIRECT("D$2:D"&ROW()-1)),B2*C2) です なるほどセルにSUBTOTALの文字があるだけで「ネストしている」と認識されてしまうのですね。 教えていただいた方法+自行より上の小計累積を引き算する方法を考えてみます

その他の回答 (2)

回答No.3

ご質問内容の数式とサンプルで確認したところ、長い数式も短い数式も答えとして 「1400」が戻りましたので、数式自体は問題ないのかな?と思ってみたり。 意表をついて計算方法が「手動」になっていませんか? ツール→オプション→計算方法→「自動」にチェックは入っていますか?

concatena
質問者

お礼

「手動」ではなかったようです 回答ありがとうございました

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

HELPを見ると次の条件がありましたので、範囲内にSUBTOTAL関数が使用されている為、計数されないのではないでしょうか。 ※範囲内に他の集計値が挿入されている場合、ネストされている集計値は、計算の重複を防ぐために無視されまます。 案ですが、SUBTOTALをSUM関数に変更すれば計数しますが如何でしょうか。

concatena
質問者

お礼

回答ありがとうございました SUBTOTAL関数はSUBTOTAL関数の値を無視することは知っていましたが、IF文で分岐してSUBTOTAL関数ではない計算式で求めた値は合計してくれるものと早合点していました。