subtotal関数で在庫数の計算がうまくいかない問題について

このQ&Aのポイント
  • エクセル勉強中で、他の方の質問や回答を参考にしている中で、subtotal関数を使用して在庫数、収入、支出の合計と件数を計算しようとしています。
  • 収入と支出の計算はうまくいくのですが、在庫数の計算がうまくいきません。データが直接入力ではなくVLOOKUP関数で取得されており、収入と支出には00千円という書式設定がされています。
  • 在庫数の計算には以下の式を使っています: =SUMPRODUCT((MOD(ROW(データ行),3)=0)*SUBTOTAL(2,INDIRECT("C"&ROW(データ行)))*データ行)。東京地区の件数の計算方法も教えてほしいです。
回答を見る
  • ベストアンサー

subtotal関数でのエラーについて

現在前任者が使っているエクセルファイルを使いやすくするために、エクセル勉強中です。他の方の質問や回答を見させていただいてとてもためになりました!しかし・・・つまずいてしまったので教えてください★ A支店 東京地区 在庫数          収入          支出 B支店 東京地区 在庫数           収入                  支出 C支店 大阪地区 在庫数          収入          支出 ___________ 合計  件  在庫数        収入        支出 といった表をオートフィルタを使って、subtotal関数で在庫数、収入、支出の合計と件数を出したいのですが・・・ 収入と支出は上手くいくのですが、在庫数が上手くいきません。データはすべて直接入力ではなくVLOOKUPで持ってきており、収入と支出は00千円という書式設定をしています。この場合、何がいけなくて在庫数だけが#VALUE!という表示になってしまうのでしょうか? ちなみに、=SUMPRODUCT((MOD(ROW(データ行),3)=0)*SUBTOTAL(2,INDIRECT("C"&ROW(データ行)))*データ行)という式を入れています。 また、たとえば東京地区のみの件数の出し方を教えてください。 わかりにくい質問で申し訳ありませんが、どなたかご回答宜しくお願いいたします。

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

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

こんばんは。Wendy02です。 追伸: #前回の範囲と同じということにすれば、以下のようにしか今は思いつきません。 私は、なるべく配列の確定をしないで、できる数式がないか探していました。今、やっと、私のイメージにあるものが、出来ましたので、ここに書いておきます。(使わなくても結構です) 4行目, 7行目, 10行目, 13行目 のそれぞれのセルを個別に計算する数式です。 =SUMPRODUCT(SUBTOTAL(9,INDIRECT("C"&ROW(INDIRECT("C1:C"&ROWS(C2:C13)/3))*3+1)))

mipmip
質問者

お礼

Wendy02様 ありがとうございます。ずばり私の求めていた回答でした!できるんですね~。感激です。 せっかく教えていただいた式も、内容をわかっていなかったら応用できないのでがんばって勉強します^^配列数式も使ったことがなくちょっと抵抗があったので、今回の式を使わせていただきました!社会人二年目でまだまだな私ですが、Wendy02さんを目標にがんばります!!

その他の回答 (6)

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

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...」ところが、少し、ややこしいように思います。 そこをクリアすれば、後は、加工できるかと思います。作るときは、そうして一番中心になる部分から付け足して作っていきます。このコツが分かると、すぐに出来るようになります。

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

mipmip 様 Wendy02です。 前回の範囲と同じということにすれば、以下のようにしか今は思いつきません。 =SUM(IF(SUBTOTAL(3,INDIRECT("C"&ROW(C2:C13)))*(MOD(ROW(C2:C13),3)=1),C2:C13,0)) これは、配列数式ですから、『配列の確定』が必要です。数式は、{=...}で囲まれます。 『配列の確定』 一旦、数式のところで、F2を押して、再度、SHIFT キーとCTRL キーを押しながら、ENTER を押すと、式が実体化して、値が出てきます。

mipmip
質問者

お礼

Wendy02様 できました~~~!!!!すごいうれしいです! ほんとにほんとにありがとうございました!!お世話になりました(>_<)

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

mipmip 様 こんにちは。Wendy02です。 そうでしたか! 昔、一度出合ったことがある、配列の範囲をずらす技が必要かと思いましたので、それは、難問だなって思いましたが、どうやら違ったようです。(逆にヨカッたです) >支店数の合計のみエラーになってしまったんです。 例えば、昨日と同じように、地区ブロックを4つ設けてありますので、13行までになりますが、このようにすれば出ますね。(3 × 4 + 上部の項目1行 = 13 行) 支店数 =SUMPRODUCT(SUBTOTAL(3,INDIRECT("C" & ROW(C2:C13)))*(ISERROR(FIND("支店",C2:C13))=FALSE)) >本当はほかにもっといい方法があるのかもしれないですが。。。 東京とか大阪が同じ文字が三つ並んでいますから、ブロックの中の2行目の東京なんかは、フォントの色を白で消してあげると、きれいに見えるかもしれませんね。(こちらに分かりやすく書いてくださっているので、もう、なさっているかもしれませんが。) それ以外については、私には、表自体は、これは完成されたものとしか見られません。私も、会社勤めの経験で、同じような表は見てきましたから、この表なら、どこの会社でも定番の表だと思います。 これに、VLookUp とか、オートフィルタがついているのですから、これ以上のものを望むのは、贅沢かもしれませんネ。^^; 初期は、このような表は、ワープロで作っていたのですから、夢のようです。 うまくいくと良いのですが・・・。

mipmip
質問者

お礼

Wendy02様 ありがとうございます!!支店数合計、上手くいきました^^ 支店数合計はsubtotalのカウントを使って、やってるんですよね。うまくいくと、エクセルはすかーっとしてほんとにうれしいです。・・・あと一回だけお力をお借りしてもいいですか? この表で、取扱件数合計は、やはり支店名やオープン日があるため、エラーになります。その切り抜け方を教えて下さい(>_<)ずうずうしくいろいろお願いしてしまってすいません。

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

こんばんは。Wendy02です。 ずっと、半日、頭の中でぐるぐると同じ絵が回っていた感じがします。^^; いまさら大変すみませんが、私は、その表の中で、どのようにして、オートフィルタは使っているのか良く分からなくなったのです。ちょっと確認しながら、回答させてください。 エラーになる原因は、たぶん、(データ行)というのを、それぞれの計算をさせるために、ずらしてあったのですね。たぶん、実際の式を書いてくだされば分かったのですが、それは、かなり高度なテクニックです。私は、間違いなく、これは難問のひとつとして、挙げられると思います。    A       B * 1  ○支店     収入 2  オープン日   支出 3  取扱件数    差引 4  地区 _________________________ 5  ★支店     収入 6  オープン日   支出 7  取扱件数    差引 8  地区 _______________________ ・ ・ ・ _____________   合計件数    合計収入           合計支出           合計差引 * 1行目に、項目名を入れないと、オートフィルタはうまくいかないと思いますが、それはどのようにしていますか? 次に、今の状態では、オートフィルタでは、地区別というか、例えば、東京地区という分類は、4行目・8行目は選べても、 地区ブロック ┌───────────┐ │ ○支店     収入 │ オープン日   支出 │ 取扱件数    差引 │ 東京地区       └───────────┘ という、ブロックでは見られませんよね。東京地区という表示の中で、一番下に、 合計を出すということになりますね。 (修正表)    A      B 1  支店名    金額  ←項目名を加えました ───────────── 2  ○支店     収入 3  オープン日   支出 4  取扱件数    差引 5  東京地区 ───────────── 6  ★支店     収入 7  オープン日   支出 8  取扱件数    差引 9  大阪地区 ───────────── オートフィルタを使えば、 1  支店名    金額  ←項目名を加えました 5  東京地区 としか出てきませんね。 以下は、上で書いた地区ブロックを4つ下に作ってみて、数式を考えてみました。 それで、それぞれの地区の合計をオートフィルタで出すとすると、 合計収支の計算式は、以下のようになります。 今は、項目名を入れて、A1:B17 の範囲にデータがあるとします。(修正表) A19: 合計収入 B19:  (B18は、一行空けました。もし、くっつける場合は、オートフィルタの領域を再度設定したほうがよいです。数式までをオートフィルタの範囲とされます。) =SUMPRODUCT((MOD(ROW($A$5:$A$17),4)=1)*SUBTOTAL(3,INDIRECT("A"&ROW($A$5:$A$17)))*B2:B14) フィルダウンコピーで、式をB21 までコピーします。 A20: 合計支出 B20: =SUMPRODUCT((MOD(ROW($A$5:$A$17),4)=1)*SUBTOTAL(3,INDIRECT("A"&ROW($A$5:$A$17)))*B3:B15) A21: 合計差引 B21: =SUMPRODUCT((MOD(ROW($A$5:$A$17),4)=1)*SUBTOTAL(3,INDIRECT("A"&ROW($A$5:$A$17)))*B4:B16) に入れました。 このようにしたらいかがでしょうか? 解説すると、最初の「地区」のセルを基点とします。気をつけなくてはならないのは、それぞれの計算する行の B2:B14, B3:B15, B4:B16 の領域は、同じ長さ(サイズ)にしなければなりません。そうしないとエラーが出ます。 本来は、ピボットテーブルやデータメニューの中の「集計」のほうが便利かもしれません。 いまさらですが、かなり凝った表のような気がします。

mipmip
質問者

お礼

Wendy02さん 本当に親切に答えていただいて、ありがとうございます。初めて教えてgoo!を利用したのですが、こんなに親切に答えていただけて本当に感謝です。つたない説明で、申し訳ありません。質問に関連する部分だけの抜粋のつもりで省略した表の説明をさせていただいたのですが、やはり全部関連しているのできちんと説明するべきでした。親切に答えていただいたのを説明不足で無にするようでいまさらながら、本当にすみませんでした。実際は下のような表です。  A     B  C    D  E  E・・・ 1 支店コード 地区 支店情報 項目 4月 5月・・・ 2  1   東京  ○支店  収入 3      東京  オープン日  支出 4      東京  取扱件数  差引 _______________________ 5  2   大阪  ★支店  収入 6      大阪  オープン日  支出 7      大阪  取扱件数  差引 _______________________ ・ ・ ・ ______________________       合計      収入       支店数     支出               差引 このようになっていて合計を出し、オートフィルタで地区ごとに合計収入・合計支出・合計差引を月ごとに出してプリントアウトしています。そこまでは上手くいったのですが、支店情報の行はVLOOKUPで支店名やオープン日が入っているので支店数の合計のみエラーになってしまったんです。それで、この質問をさせていただいたのです。もともと私にそれほど知識がないのと、前任者から引き継いだ表なので、本当はほかにもっといい方法があるのかもしれないですが。。。

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

こんにちは。 >計算範囲には1項目(1支店)に付文字が入っています。 =SUMPRODUCT((MOD(ROW(データ行),3)=0)*SUBTOTAL(2,INDIRECT("C"&ROW(データ行)))*データ行) <半角修正済み> この中の3番目の「データ行」に文字列が入っていたら、それは、エラーが出ますね。 その配列式は、掛け算になっていて、IF条件文になっていないので、エラーの回避が出来ません。 >他に方法はないですか? そうすると、一般的には、現在の配列方式をやめる以外は方法がないように思います。 例えば、このような式です。 =(MOD(ROW(),3)=0)*SUBTOTAL(2,C2)*C2 それで、最後に、SUM関数で足してやります。もし、途中でエラーが出ているようでしたら、その部分は修正してあげます。 他に、ちょっと長くなるけれど、こんな式でも良いですね。 =IF(ISERROR((MOD(ROW(),3)=0)*SUBTOTAL(2,C2)*C2),0,(MOD(ROW(),3)=0)*SUBTOTAL(2,C2)*C2) それで、SUM関数で合計を出せば、エラーは出しません。本当は、もっとうまいやり方があるはずですが、今の文字情報だけでは、限界があります。

mipmip
質問者

お礼

ご回答していただき、ありがとうございます★エラーの理由も説明していただいてとても勉強になります! 今回のアドバイスなんですが・・・私の知識不足で、=(MOD(ROW(),3)=0)*SUBTOTAL(2,C2)*C2の式から、sum関数で足すやり方がわかりません。。詳しく教えていただけますか?? <データ情報の捕捉> sheet1に、 支店名 オープン日 取扱件数 住所などなど・・ それをVLOOKUPで、sheet2に    A      B 1  ○支店     収入 2  オープン日    支出 3  取扱件数   差引 4  地区 _________________________ 5  ★支店     収入 6  オープン日    支出 7  取扱件数   差引 8  地区 _______________________ ・ ・ ・ _____________    合計件数   合計収入           合計支出           合計差引 この表で、オートフィルタで地区ごとに合計を出すべく、エクセル改良中です。宜しくお願いします!!

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

こんにちは。 =SUMPRODUCT((MOD(ROW(データ行),3)=0)*SUBTOTAL(2,INDIRECT("C"&ROW(データ行)))*データ行) "C" が、全角になっているのは、ご愛嬌として、 オートフィルタの一番上は、項目の文字として、在庫の2行目を対象とするので、MOD(ROW(C2:C13),3)=2 と して計算してみました。 =SUMPRODUCT((MOD(ROW(C2:C13),3)=2)*SUBTOTAL(3,INDIRECT("C"&ROW(A2:A13)))*C2:C13) と実際に計算してみて、特に、エラーは発生しないようなのです。数式と計算も検証してみましたが、問題はありませんでした。オートフィルタで正しく計算してくれます。 その上記の全角文字以外としてあるのは、計算範囲に文字を入れているのではないでしょうか?

mipmip
質問者

お礼

ご回答ありがとうございます!質問内容には書かなかったのですが、計算範囲には1項目(1支店)に付文字が入っています。その場合上手くいかないのですね。。他に方法はないですか?すいません(>_<)

関連するQ&A

  • SUBTOTAL関数

    エクセルの表にオートフィルターをかけて、抽出したデータの集計を出す時、SUBTOTALを入れた行まで非表示になることがあります。なぜでしょうか?

  • SUBTOTAL関数と他の関数の組み合わせ

    仕事にて今とても困っているのでご助言いただけましたら幸いです。10数種類の商品(例えば本や電化製品等)とさらにその中の種類(例えば本の分類で漫画等)の在庫数をデータ入力しているのですが、オートフィルの状態で一つの項目(例えば本)を選ぶと全ての数値の合計数が出てしまう為SUBTOTAL関数を入れてみましたが、さらにその中での細かい商品(例えば本の分類で漫画等)在庫数を表示させたい場合で悩んでいます。素人考えでSUBTOTAL関数とCOUNTIFを組合わすことができれば表示されるような気がしたのですがなにぶん素人なものでどのような数式を入力すればいいのか分かりません。例 =SUBTOTAL(2,A1:A100)+COUNTIF(A1:A100,"漫画") このようにしてみたところ、COUNTIFのみ反映されてしまい、SUBTOTALのデータは無視されてしまうようです。何卒ご助言お願いします。

  • エクセルのSUBTOTALの使い方

    QNo.405923でSUBTOTALの使い方を質問したものですが その後、自分でやってみましたが、以下SUBTOTAL形式で 最後に合計を出すと商品Aを計算せず商品BしかSUBTOTALで合計が出てくれません。やり方に問題があるのでしょうか。(ちなみに、商品Bのように、複数行のSUBTOTAL 同士 では、うまくいきます) 商品  個数  単価  値段 計算式  A 1 60,300 \60,300 =SUBTOTAL(9,RC[-1]) B 1 157,920 157,920 (B付属品)2 14,400 28,800 \186,720 =SUBTOTAL(9,R[-2]C                      :R[-1]C) 合計 \186720 =SUBTOTAL(9,R[-4] C:R[-1]C)  

  • 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列に金額を直接入力すれば小計は正しく表示されます。 理由がおわかりの方、教えてくださいませんか

  • エクセル 行挿入のマクロについて

    こんばんは、エクセルのマクロについてお伺いします。 現在 A1:支店名 B1:連番 C1:在庫数 全部で1000行位入力があります。 ・A列には支店名 ・B列には連番は1・2・3~と1000件位 ・c列には在個数にはそれぞれ1桁から2桁の数字 【質問】 在庫数の数だけその連番の行を増やしたい。 例えば、 A2:東京支店 B2連番:1 C2在庫数:3 だとすると2行目のあとに2行挿入し在庫数が3なので下記のように3行にしたい。 A2 東京支店 B2連番 1 C2 在庫数 1 A3 東京支店 B3連番 1 C3 在庫数 空欄 A4 東京支店 B4連番 1 C4 在庫数 空欄 何せ数が多いのでマクロをお教え頂ければ助かります。 ※その際、支店名と連番は同じ物がはいるとありがたいです。 ※在庫数は空欄で構いません。 マクロでなくても方法があればお教え下さい。 よろしくお願い致します。

  • SUBTOTAL関数での選択範囲を表示する方法

    仕事で使う日報に、毎日あるデータを手入力しています。 入力件数が多い時は結構面倒なので、VBAで数値を日報のシートに飛ばそうと考えています。 いくつかあるデータをVBAのSUBTOTALメソッドで合計などを集計し、 各集計を指定のセルに飛ばすことはできるのですが、 SUBTOTALで指定されたセル範囲の最頻値を取り出す方法がわかりません。 MODE関数を使うということは分かるのですが、 SUBTOTALで指定されるセル範囲は毎回変わるので、 MODE関数で指定するセル範囲をSUBTOTALのセル範囲を同じになるようにできればと考えています。 どなたかお知恵を貸して頂ければと思います。 宜しくお願いいたします。

  • エクセルのSUBTOTALで

    =SUBTOTAL(102,E7:E65) という関数がありますが行数が表によって変化します。 そこで E65 ではなくデータのある行のマイナス1を常に指定したい。 (最終行は合計なのでカウントしたくない) こんなときどうしたらいいでしょうか? VBAを使わないと無理でしょうか。 その場合のコードはどう記述すればいいでしょうか。 教えてください。

  • Excel 連番の関数(SUBTOTAL)のコピー方法

    今使用している下記のような表があるのですが、同じシート内に上下に合計表があります。 SUBTOTALを使ってオートフィルタでB列が a またはb を選んだ時でも A列が連番になるよう、C列の合計が絞り込み後もに計算させるように簡単ではありますが、こんな表があるのですが、 今後上下の表の一部データを入れ替えする作業もあり、普通にコピーをしていれかえさせたいのですが、うまくいかない為、 $絶対参照を変えたりと、いろいろ試しているのですが、うまくいきません。 知恵をお貸し頂きたく、質問させて頂きました。 可能であれば教えて頂きたいのですが、 どうかよろしくお願いします。 -------------------------------------------------------      A   B    C    A1=SUBTOTAL(3,$B$1:B1)  1   1   a    1 2   2   b    1     A2~A4=コピー 3   3   a    1 4   4   b    1 5   合計 aまたはb       C5=SUBTOTAL(3,C2:C4) 6-------------------------------------------------- 7   1    a    1    A7=SUBTOTAL(3,$B$7:B7) 8   2    b    1    A8~A10=コピー 9   3    a    1 10  4    b    1      11  合計  aまたはb      C11=SUBTOTAL(3,$B$7:B7) -------------------------------------------

  • SUBTOTALと他関数の合体はできますか?集計の時です

    エクセルの集計を行いたいのですが、オートフィルターを活用している中、集計をSUBTOTALとIF関数の合体のようなものを作りたいのです。出来ますでしょうか・・・(私の知識の無さですみません) 一例はこの通りです。    A列 B列  C列 1 幼児 りんご 300 2 中学 みかん 100 3 高校 バナナ 200 4 大人 りんご 500 別の行にそれぞれの集計値を出すセルを作ります。 幼児合計 中学合計 高校合計 大人合計 B列の集計をしたいとき、各合計は、 普通にSUBTOTALだけだと幼児も中学も高校も全部一緒の合計になってしまいます。 さらにA列を絞りこめばいいのですが、分析において絞り込みたくないのです。 りんごは幼児、中学、高校、大人にどのくらいあるのかを 一目で分かるようにしたいためです。 どうか、ご教授ください。

  • Excel関数:SUBTOTALとSUMIFを組み合わせる?

    下記のような場合の集計ができる関数を教えて下さい。 SUBTOTALとSUMIFを組み合わせようと思ったのですが、うまくいきませんでした。 よろしくお願いします。 <表の内容> ・セルA1:「ランク」 ・セルA2~A50:「A」or「B」or「C」を入力している ・セルB1:「金額」 ・セルB2~B50:各金額を入力している <集計方法> ・セルB51に「ランクが"A"」の金額合計を表示したい ・ただしオートフィルターを使って他の条件で抽出もおこなっているのでSUBTOTAL関数のように、表示されている行の値のみを合計したい

専門家に質問してみよう