質問: subtotal関数でのエラーについて 現在前任者が使っているエクセルファイルを使いやすくするために、エクセル勉強中です。他の方の質問や回答を見させていただいてとてもためになりました!しかし・・・つまずいてしまったので教えてください★ a支店 東京地区 在庫数 収入 支出 b支店 東京地区 在庫数 収入 支出 c支店 大阪地区 在庫数 収入 支出 ___________ 合計 件 在庫数 収入 支出 といった表をオートフィルタを使って、subtotal関数で在庫数、収入、支出の合計と件数を出したいのですが・・・ 収入と支出は上手くいくのですが、在庫数が上手くいきません。データはすべて直接入力ではなくvlookupで持ってきており、収入と支出は00千円という書式設定をしています。この場合、何がいけなくて在庫数だけが#value!という表示になってしまうのでしょうか? ちなみに、=sumproduct((mod(row(データ行),3)=0)*subtotal(2,indirect("c"&row(データ行)))*データ行)という式を入れています。 また、たとえば東京地区のみの件数の出し方を教えてください。 わかりにくい質問で申し訳ありませんが、どなたかご回答宜しくお願いいたします。
回答: mipmip様 こんにちは。wendy02です。 私も感激です! 配列数式は、一種のパターンで、通常、誰かが考えたパターンを借りているに過ぎません。そんなに多くのパターンがあるわけではありません。前任者の方は、たぶん、達人に近いほうだと思います。元の式は、私個人ですと、じっくりと考える手間を惜しんで、たぶん、vbaで作ってしまうだろうと思います。 それで、今回の数式は、今までにはないオリジナル・パターンが出来たので、大変にうれしいです。最初は、ダメかと思いました。 そこで、その数式の解析しかたを教えておきます。 これは、私が教わった、配列数式の作り方のコツです。 =sumproduct(subtotal(9,indirect("c"&row(indirect("c1:c"&rows(c2:c13)/3))*3+1))) ================================================ メニューの中の[ツール]-[ワークシート分析]-[数式の検証]というのがありますが、これでは、小さくてよく分かりません。 それで、このようにします。 数式の中を、マウスで範囲を取って、f9 を押しますと、中身のデータが出てきます。 そうすると、その出てきたデータによって、考え方が分かるはずです。 indirect("c1:c"&rows(c2:c13)/3) ↓ row(indirect("c1:c"&rows(c2:c13)/3))*3+1 ↓ indirect("c"&row(indirect("c1:c"&rows(c2:c13)/3))*3+1) ↓ subtotal(9,indirect("c"&row(indirect("c1:c"&rows(c2:c13)/3))*3+1)) このようにして、だんだん広げていきます。 2番目の「row(indirect...」ところが、少し、ややこしいように思います。 そこをクリアすれば、後は、加工できるかと思います。作るときは、そうして一番中心になる部分から付け足して作っていきます。このコツが分かると、すぐに出来るようになります。