• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelのSUM関数の集計範囲を可変にしたい)

ExcelのSUM関数の集計範囲を可変にしたい

このQ&Aのポイント
  • ExcelのSUM関数を使ってカテゴリ別の売上や利益を集計しているリスト表で、行を追加する際に集計範囲が自動的に変わるようにしたい。
  • マクロを使用して行を追加する場合、集計範囲が途中になる行に行を挿入すると集計対象範囲がずれる問題がある。
  • 実装方法としては、表全体の最後の行や小計の行番号を使用して集計範囲を変更する方法や、マクロで行を追加する際に対応する方法が考えられる。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

>ただこの方法では、小計の所に集計されるのが先頭行から、小計の部分を除くすべての売上になってしまことがわかりました。   >先の例で2番目の小計行では 売上 500となるべきところで 600になってしまいます  はい、御質問文に有る例では   A   B    C   1 項目  売上   2  田中  100 3 小計  100   4 山田 200   5  佐藤 300 ⇒ 挿入    6  小計 600 ※ となっており、「売上 500」にはなっておりませんでしたので、 >小計の所に集計されるのが先頭行から、小計の部分を除くすべての売上 を求めるための方法をお尋ねになっているものと思った次第です。 >売上 500となるべき >最初の小計行、2番目の小計行をそれぞれの範囲でもとめる という事でしたら、次の様な関数にして下さい。 =SUM(C$1:INDEX(C:C,ROW()-1))-SUMIF($A$1:INDEX($A:$A,ROW()-1),"小計",C$1:INDEX(C:C,ROW()-1))*2

kazusmo
質問者

補足

kagakusukiさん お世話になります。最初の例がそもそも間違っており 大変申し訳ありません。 アドバイス頂いた式であれば、期待した通りの 結果になりました。 個人的にはこれで問題ないと思うのですが、 この表の管理元が別部署でこちらの都合だけ で、少々複雑なこの数式への修正を許可して くれるかるか自信が持てないです。 この式への修正を許可してもらえない場合も 考えてマクロ修正も考えておkないといけな さそうです。 この数式は、私が知らなかっただけでベテラン の方であればときどき目にするもので特に 問題ないでしょうか? お気づきの点あれば教えていただきたく。 以上

その他の回答 (4)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

そのリスト範囲を、ホームタブの「テーブルとして書式設定」してください。 このように設定しておけば、通常のリストでは対応しない行の挿入時の数式の自動挿入だけでなく、データの追加をした場合も、入力規則のリスト範囲やピボットテーブルなどのデータ範囲が自動拡張してくれます。

kazusmo
質問者

補足

KackyNo1さん 返信ありがとうございます 試してみました。当方はExcel2007環境ですが テーブルとして書式設定ー新しいテーブルスタイル ウィンドウが開く ここで集計行を開いて そこで集計行の書式を定義しておけば 行挿入時の自動挿入やデータ追加時の・・・ などを設定できるという点、そんな機能があったとは知りませんでした 非常に参考になりました ただ、質問の際には思いいたらず説明していませんでしたが リスト表は、自分以外が管理しており、私の都合で書式を定義したり できません なのでこの方法は、私のケースで使えなさそうです。 参考までに教えていただきたいのですが 「テーブルとしての書式設定」機能は、新しくテーブル を1から作る場合は有用だと思いますが、私のように 誰かがすでに作ってしまったテーブルを前提にして書式を定義 するというようなことが可能でしょうか。 たとえば 集計行も小計 が複数あって それをまとめて総合計 があるよういうような場合、Excelに小計、総合計などを定義 できるものなのでしょうか?

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

エクセルの機能の「小計」を使い、集計行を都度入れ直してやるのも一つの方策です。 ご質問の直接の回答としては、B6には =SUM(B$1:INDEX(B:B,ROW()-1))-SUMIF(A$1:INDEX(A:A,ROW()-1),"小計",B$1)*2 といった数式でも計算できます。

kazusmo
質問者

補足

keithinさん 返信ありがとうございます。 この方法でも kagakusukiさんと同じで 2番目の売上小計 は 500となるべきところが、600となってしまいます 何か良い方法についてお気づきなら教えてください 

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 A列に「小計」と入力されている行の所に入力する関数を次の様なものにされると良いと思います。 =SUMIF($A$1:INDEX($A:$A,ROW()-1),"<>小計",C$1:INDEX(C:C,ROW()-1))

kazusmo
質問者

補足

kagakuskiさん  返信有難うございます。試してみました。    ただこの方法では、小計の所に集計される  のが先頭行から、小計の部分を除くすべての売上  になってしまことがわかりました。    先の例で2番目の小計行では 売上 500となるべき  ところで 600になってしまいます  最初の小計行、2番目の小計行をそれぞれの範囲で  もとめるには修正が必要です。    時間がありましたら、教えて頂けると大変参考に  なります。

  • shintaro-2
  • ベストアンサー率36% (2266/6245)
回答No.1

表はそのままで 集計をピボットテーブルで行えば済むのでは?

kazusmo
質問者

補足

shintaro-2 さん すいません ピボットテーブルの機能詳しくないのですが 小計を求められればいいので大がかりすぎる気がします すでにリストがピボットテーブルで作成されていれば小計行の 追加等もレベルを上げたりするということですね お気づきの点あればお願いします

関連するQ&A