[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『SUMIF関数とSUBTOTAL関数を組み合わせたい』(とも)
過去履歴等、調べてみたのですが、なんだかちょっとづつ違うようで、 理解ができず、質問させていただきました。
A____ B____ C____ D____ E____ F____ 税区分 A B C 金額 ○○会社 15,000 15,000 ××会社 非課税 200,000 200,000 △△会社 5,000 5,000 ○○会社 10,000 10,000 ○○会社 750 750
小計 230,750 非課税 200,000 課税 30,750 消費税 1,537 総計 232,287
としていて、A列でフィルタをかけ、各会社ごとに資料を印刷しています。
E8 =SUBTOTAL(9,F2:F6) E9 =SUMIF(B2:B6,"非課税",F2:F6) E10 =F8-F9 E11 =ROUNDDOWN(F10*5%,0) E12 =SUM(F9:F11)
としているのですが、問題なのはセルE9の関数なのですが、 例えば、A列の○○会社をフィルタかけた場合、
A____ B____ C____ D____ E____ F____ ○○会社 15,000 15,000 ○○会社 10,000 10,000 ○○会社 750 750
小計 25,750 非課税 200,000 課税 -174,250 消費税 -8,712 総計 17,038
となり、××会社の非課税の金額はそのまま表示されてしまいます。 私の希望としては下記のように、
A____ B____ C____ D____ E____ F____ ○○会社 15,000 15,000 ○○会社 10,000 10,000 ○○会社 750 750
小計 25,750 非課税 0 課税 25,750 消費税 1,287 総計 27,037 こういう結果を得たいのです。 E9セルの関数を教えてください。 よろしくお願いいたします。
(とも)
■作業列を使う
G2: =IF(SUBTOTAL(3,A2),F2,"") G6までオートフィル
>E9セルの関数を教えてください。
E9かF9か、どっちかわかりませんけど
=SUMIF(B2:B6,"非課税",G2:G6) ■作業列を使わない
E9かF9か、どっちかわかりませんけど(しつこい?)
=SUMPRODUCT((B2:B6="非課税")*SUBTOTAL(9,INDIRECT("F"&ROW(F2:F6))))
(よみびとしらず)
(よみびとしらず)さん
できました!! 作業列をを使わない方法で早速関数を使ってみました。 完璧でした。 本当に助かりました。ありがとうございます。
ところで、この関数について質問です。
>=SUMPRODUCT((B2:B6="非課税")*SUBTOTAL(9,INDIRECT("F"&ROW(F2:F6))))
ですがSUMPRODUCT関数は理解しています・・・次のSUBTOTAL〜でINDIRECT("F"&ROW(F2:F6)が どうも理解不足で、意味を教えてください。 もちろん、SUBTOTAL(9,F2:F6)では正しい結果が求められないのは分かっているのですが、 INDIRECT("F"&ROW(F2:F6)はどう解読するのか分かりません。 "F"列? F2〜F6の範囲?
今後の知識に役立てたいのでぜひとも教えてください。
(とも)
SUBTOTAL(9,範囲) → フィルタ結果範囲の合計を返す
SUBTOTAL(9,INDIRECT("F"&ROW(範囲)) → フィルタ結果範囲毎の数値を配列で返す。
(GobGob)
SUMPRODUCTが理解できてるというのは、配列数式もわかってるってことかな?
配列数式の基本的なことはわかってるという前提で説明します。 えっえっ何それ?ってことやったら、ネットで調べてみてください。 作業列で考えるとわかりやすいんですけど
G2: =(B2="非課税")*SUBTOTAL(9,F2) G6までオートフィル
非課税の合計は =SUM(G2:G6) でもええはずです。 これを配列数式にしようと思って ↓ にしたところで
=SUMPRODUCT((B2:B6="非課税")*SUBTOTAL(9,F2:F6))
B2:B6="非課税" のところは配列になっても SUBTOTAL(9,F2:F6) はあくまで F2:F6 の合計であって配列ではありません。
これを配列にするために SUBTOTAL(9,INDIRECT("F"&ROW(F2:F6))) としているということ。
サンプルデータで言えば、INDIRECT("F"&ROW(F2:F6)) は {15000;200000;5000;10000;750} という配列
○○会社でフィルタをかけると、SUBTOTAL(9,INDIRECT("F"&ROW(F2:F6))) は {15000;0;0;10000;750} という配列になります。
今後に役立てるといっても、こういう使い方はめったにしませんけどね。 それとINDIRECTは揮発性関数なんで、あまり重たい数式と併用すると計算速度が遅くなりますので、ご注意を。
(よみびとしらず)
ありがとうございます。 参考にさせていただきます。
(とも)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.