行を追加した時の値の合計範囲に関する問題

このQ&Aのポイント
  • 行を追加する際に、合計行の参照範囲が変動しない問題が発生しています。
  • 現在使用している式や関数では上手く動作せず、SUMやOFFSETなども試しましたが解決できません。
  • 合計行の上に空白行を挿入し、その上の行にSUM関数を使用することで一部解決できますが、見た目や扱いに不便があります。
回答を見る
  • ベストアンサー

行を追加した時の、値の合計範囲

行を追加するマクロがあり、実行すると「合計」行の1行上に行が追加されます。 行が追加された分「合計」のある行が下がっていくんですが、その関数が変動してくれなくて困っています。    A   B   C   D   E   F   G   H   I 1    商品の基本データ ・    ・ ・    ・ 14   商品の基本データ 15 16     日付  入庫  出庫               本日在庫  17 2012/04/01  100                     100 18 2012/04/05  50                      150 19 2012/05/03      100                 50 20 2012/05/04  300                     350 21    ・         150                 200 22    ・          50                 150 23    ・      200                     350 24    ・          10                  340 (ここに行が挿入されていく) 25 合計       (1)   (2)                340(=(1)-(2)) (1)=IF(COUNT($C$17:$C24)=0,"",SUM($C$17:$C24)) (2)=IF(COUNT($D$17:$D24)=0,"",SUM($D$17:$D24)) 現在こんな感じで式を入れています。$C24と$D24が$C25...、$D25...等動いていってくれるといいんですが・・。 他にもSUMPRODUCTやOFFSETなど色々試しましたが、上手くいきません。 行が増えていく(セル参照範囲が変わってくれない)、C:CやD:Dとして設定できない、データが連続していない、などが原因だと思っています。 A列には何もありません。 E~H列は他にもデータが入っています。 マクロで、B17からHの合計の1行上までを日付でソートすることがあります。 合計行の上に空白行C25を入れ、合計行C26にSUM(C17:C25)とし、 挿入する位置を空白行C25の上とすれば、SUMは挿入行を抱えていってくれるんですが、 この場合空白の行25を高さ0の不可視にさせなければならず、利用する側としては21・22・23・24・26と、25が飛んでいるのが気になるものと思います。 できればそういう疑問を持たせることなく可動させたいです。 因みにVBAでWorksheet_ChangeやWorksheet_Selectionhangeなどは既に使用しているので、 マクロで自動で合計値を入力することはできないと思います。 ボタンで動かすマクロでなら出来そうですが、合計を逐一表示するのにマクロボタンを設置するのもどうかと思うので・・。 いくらネットで探しても方法が見つからなかったので、何方かご教授宜しくお願い致します。

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

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

(1)について =IF(COUNT($C$17:INDEX(C:C,ROW()-1))=0,"",SUM($C$17:INDEX(C:C,ROW()-1))) (2)について =IF(COUNT(INDIRECT("R17C:R[-1]C",FALSE))=0,"",SUM(INDIRECT("R17C:R[-1]C",FALSE))) などのようにしてみます。 同様の工夫はOFFSET関数を使っても,勿論出来ます。

sora86miku
質問者

お礼

そのままコピペで動作致しました! 例では合計は25行目にしたんですが、実際には40行目くらいにいたもので ご回答頂いた関数やコードを自分で行の数値などを変えて当てはめなければいけないなと思っていたので、そのまま使えたことに感激しました。 (1)と(2)で関数の使い方が違いますが、これはどちらでも使えるということですよね。 ROWやR17Cというセルの参照の仕方など、自分にはまだ理解できていないところなのですが、どちらかの関数式をCとDの両方に使いたいと思います。 (1)についてくださった式はDにオートフィルすると崩れるようなので、Dに合わせたセルの参照をし直さないといけないようですが (2)についてくださった式はCにオートフィルしてもそのまま使えました。 今回は直すのに簡単そうな(1)の関数式を使わせて頂きたいと思います。 ご回答ありがとうございました!

その他の回答 (2)

  • silverfd
  • ベストアンサー率57% (204/356)
回答No.3

これが一番簡単ですね。 (1)=SUM(INDIRECT("C2:C"&ROW()-1)) (2)=SUM(INDIRECT("D2:D"&ROW()-1)) Indirect関数とは、文字列を数式的な意味にしてくれる関数です。 ちなみに、余計なお世話ですが、マクロについて述べさせて頂きます。 >VBAでWorksheet_ChangeやWorksheet_Selectionhangeなどは既に使用しているマクロで自動で合計値を入力することはできないと思います。 分岐を使えば(例えば集計行に範囲名をつけて最初に取得、処理後に行位置が変動していれば合計処理に分岐とか)、イベントプロシージャでも可能ですし、 >ボタンで動かすマクロでなら出来そうですが、合計を逐一表示するのにマクロボタンを設置するのもどうかと思うので・・。 行挿入マクロの後処理で合計計算処理を追加すれば、ボタンなどこのためには必要ないです。 一応、マクロの可能性について感じていただきたかったので、あえて追加しましたが、このケースでは上記Indirect関数を利用した数式で充分なのは変わりません。

sora86miku
質問者

お礼

keithinさんと同じ作りの関数を頂けたのですが、空白の時の場合の処理を入れたまま関数を考えて下さったkeithinさんの方をベストアンサーとさせて頂きました。 マクロの件ですが、今回Worksheet_Changeは入力後セルから指定セルへの移動に使い、 Worksheet_Selectionhangeは範囲によってエンターで進む方向を設定するために使いました。 ここにどういう風に合計処理を組み込むのかはもっと勉強しないと出来そうにありません・・orz ただそういうことも出来るのだと教えて頂けたのは大きな収穫です。 為になるご回答をありがとうございました! 今後も関数やマクロは利用していかないといけないので、今回のご回答を参考に考えていきたいと思います。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

行を追加するときにマクロを使っているのであれば、 その行を追加のマクロの下の方にでも、数式自体を変更するようにしておけばいいのでは。 例えば合計行が25行目だとして、 gokei_gyo = 25 Range("C" & gokei_gyo).Formula = "=IF(COUNT($C$17:$C" & gokei_gyo - 1 & ")=0,"""",SUM($C$17:$C" & gokei_gyo - 1 & "))" Range("D" & gokei_gyo).Formula = "=IF(COUNT($D$17:$C" & gokei_gyo - 1 & ")=0,"""",SUM($D$17:$C" & gokei_gyo - 1 & "))" とすれば、数式もかわります。

sora86miku
質問者

お礼

なるほど!゜д゜ 確かに、行追加のマクロの最後に組み込めばいいだけですね・・ その発想は思いつきませんでした。盲点でした・・・。 ただ、くださったマクロコードを行追加マクロの後半に入れてみたのですが、上手く動作させることができませんでした。 gokei_gyoというのがよくわからないのですが、 「合計」のある行、例えばここでは25行目を一括で範囲指定し、「gokei_gyo」と名前をつければよかったのでしょうか。 VBAはやはり独学ではキツイですねw; ご回答ありがとうございました!

関連するQ&A

  • エクセルマクロ、集計行の上に空白行挿入

    エクセルデータがA、B、C、D、E列1000行まであります。 C列基準でE列を合計するマクロを作成しましたが(集計行はデータの下に挿入)、実行の結果、新たに挿入される集計行の上に空白行を1行挿入していくということを、作成したマクロに付加できるでしょうか? ご教授頂きたく、お願いします。

  • 範囲内に合計を出す

    毎日SUM関数で合計を出していますが、もっと簡単に出せないかと思い質問しました。H7からデーター(数字)が下に入っていきます。(H7.H8.H9.・・・・・)日によ って最後の行が違います。(シートは毎日違いますが最初に入る場所はH7からと決まっています。)昨日はH7~H20でした。今日はH7~H27ですと日によってばらばら です。計算のしかたですが、H20で終わった時は、合計ボタンを押したらH7~H20までをH1に合計を表示してH列の最終行の次も合計を表示する所まではなんとか 出来ましたが、L列から以降のセルにデーターがあっても最終行と判断しない様にするにはどうすればいいですか。(A列~K列で最終行がK25の時M列のM30にデーターがある時はH31が最終行の次と表示しますが本当はH26と表示してほしいです)アプリケーションはExcel2000です。よろしくお願いします。 Private Sub CommandButton1_Click() Dim maxRow As Long maxRow = Application.Max(Range("H65536").End(xlUp).Row, 5) Range("H1") = Application.Sum(Range("H7:H" & maxRow)) Range("A1:K2").Copy With ActiveSheet.UsedRange .Cells(.Count + 1).Select End With ActiveSheet.Paste Application.CutCopyMode = False With ActiveSheet.UsedRange .Cells(.Count + 1).Select End With End Sub

  • エクセルで、2行おきに1行追加する方法

    エクセルで、2行おきに1行追加する方法 行が2000行位あるデータについて、 1行毎では時間がかかるので、 他の方法(マクロでも作業列等)を教えて下さい。 例 行1 A 行2 B 行3 C 行4 D 行5 E 行6 F 行7 G 行8 H     上記2000行のデータを下記のように行追加をしたいのです。 行1 A 行2 B 行追加 行3 C 行4 D 行追加 行5 E 行6 F 行追加 行7 G 行8 H よろしくお願い致します。

  • エクセルでデータの最後の行に行挿入後の合計されない

    エクセルで文字・数値データを作成しております。その最後の行に合計(SUMとSUMIFを使用)を出す表があります。 データの最後の行(合計の前)に行を挿入しデータ数値を入力すると、SUM(SUMIF)の合計が、前にあったデータまでしか、合計されません。 単純な計算では、行を挿入しても合計されるのに、ナゼ今回は出来ないのでしょうか?原因が分かる方は、いらっしゃいませんでしょうか? 宜しくお願い申し上げます。

  • EXCELマクロを使い、空白行ではさまれた範囲の数字を合計

    下記のようなデータがあります。 条件 並び方:コード順 行数:変動する 見出し行の下とコードが変わる毎に空白行が1行あります。 マクロで空白行にコード毎の計と最後に合計を入れる方法を教えてください。 元データ コード 金額 1 10 1 20 1 50 2 40 2 20 2 30 3 50 3 10 マクロ実行結果 コード 金額 1 10 1 20 1 50 計 80 2 40 2 20 2 30 計 90 3 50 3 10 計 60 合計 230

  • エクセル行の挿入

    excelに行を追加する方法を教えてください! Bにある数からマイナス1行下に挿入したいのです。 1→挿入なし  2→下に1行挿入  3→下に2行挿入 数よりマイナス1行の挿入をしたいのですが、 マクロ、関数など全く分かりません。 以前の質問も見てみたのですが、見当たらないのと、 マクロ?が全くわからないので、 どなたか一から教えていただけないでしょうか? 本当に申し訳ないのですが、お願いします。 Aにkkkk Bに数が入ります。   A | B | C | D ------------------------------------- 1| kkkk   2 ------------------------------------- 2| kkkk   1 ------------------------------------- 3| kkikk   3 ------------------------------------- 4| kkkk   2 ↓行の挿入   A | B | C | D ------------------------------------- 1| kkkk   2 ------------------------------------- 2| kkkk   空白(行の挿入) ------------------------------------- 3| kkikk   1 ------------------------------------- 4| kkkk   3 ------------------------------------- 5| kkkk   空白(行の挿入) ------------------------------------- 6| kkkk   空白(行の挿入) ------------------------------------- 7| kkkk   2 ------------------------------------- 8| kkkk   空白(行の挿入) -------------------------------------

  • エクセル 行を挿入しても正しい合計値を出す方法。

    添付のようなエクセルの表を作成して管理台帳としています。 (実データは載せられないため、簡易版にしています。) 今、B9セルには(=SUM(B3:B8)が入っています。 8行目と9行目の間に行を挿入しても、合計値がきちんと(=SUM(B3:B9)の値を持ってくるようにしたいです。 過去の質問 http://okwave.jp/qa/q4644868.html 参考にして、『あ』ではできたのですが、『い』、『う』、『え』、『お』でも同様に合計値を出したいのです。 『あ』で行を挿入すると、『い』、『う』、『え』、『お』の各項目の行がずれて、 さらに『い』、『う』、『え』、『お』でも行の挿入を行います。 (挿入する行は、『あ』、『い』、『う』、『え』、『お』すべて合計値の前の行に挿入します。) きちんと、『あ』、『い』、『う』、『え』、『お』の各合計値を出す方法はありますでしょうか。 私が使っているのはエクセル2007ですが、エクセル2000を使っている人に渡すデータです。

  • エクセル2010で合計の一行上に行の追加をしたい

    会社に提出する精算書を作っています。 ボタンフォームで「行を追加する」を押すと 合計のある一行上の、日付から始まる9項目の空行がコピーされる、 というマクロを作りたいのですが Range("合計").EntireRow.Insert では入りません。 行には行番号はふっておらず、9項目すべて空で 合計行の金額セルにのみSumが入っています。 シートには結合セルはありません。 合計行より下には印鑑を押す欄などがあり、 セル幅や書式設定はそのままにしておきたいのですが 何かよい方法はありませんでしょうか。 どうぞよろしくお願い致します。

  • Access2000でボタンを押すと新しい行が自動的に追加される様にすることは可能ですか?

    可能ならば教えて頂きたいのですが・・・。 Access2000のテーブルであるボタンを押してマクロを実行すると、 新しい行が自動的に10行追加されるようにすることはできるのでしょうか? 追加される10行は空白行ではなく、あるフィールド(品番)には、 あらかじめ決められた10件のデータが挿入されている状態にしておき、 残りのフィールドは空白で、後から入力できるようにしたいのですが。 つたない説明ですみません。おそらくモジュールを使っての操作となる と思いますが、なにしろVB初心者なもので・・・。よろしくお願いします。

  • エクセルマクロで合計を計算したい

    いつもお世話になっています 可変な範囲を変数で取得して、合計を計算できるでしょうか   A  B C D  1   5  2   8  3   3  4   7  5    <-----ここ 「B5」に合計値を出したい 但し、データが可変するので常に「B5」とは限らず「B7」等の時もある これをマクロで自動取得してそのデータの下に合計を出したいのですが お願いいたします。 (”合計”・"H行番号" ・"L行番号")を変数として取得。。。。。 Range("合計").Formula = "=sum(B & H行番号 : B & L行番号)" なんてのを実行したのですが、当然のことながらダメでした。

専門家に質問してみよう