- ベストアンサー
VBAで、行数が変化する表の合計を求めたい。No2
質問番号:4708445で回答頂きありがとうございます。引き続き申し訳ありません。 質問内容が文字数制限を意識する余り、舌足らずとなっておりました。 表構成(行見出し)は以下の通りです。 年度・お名前・ランク1・ランク2・金額 (ランクは1~4) このような複数の表をランク1、ランク2でフィルタ抽出(ランク1=1、ランク2=1等)し、抽出結果を集計シートに転機します。転記する際にラスト行を取得して合計を求めるのですが、抽出ランクにより、表毎に抽出先の数は変化(よって抽出行は可変する)します。抽出条件を変えるため、結果、集計シートは、上記行見出しは同じですが、行数は異なる表が複数貼付られます。貼付時、第1の表から3行下空白で第2の表以下を貼付します。その後、表毎の最終行に合計(SUM)したいのですが、表現が稚拙で申し訳ありませんでした。 SUBTOTAL関数ですと、第1の表の合計セルの式をコピペで行うようになると思いますが、ここ作業をVBAではできないのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 貼付けた表がいくつもあり、表と表の間に空白行(2行以上とか)があって、 そのうちの上の空白行に合計を入れるとします。 例えばA列に数値が入力されてますが、ちらほら空白セルがあったとします。 その空白セルに上のセルの合計を代入するとしたら、 Sub try() Dim r As Range For Each r In Range("A1", Cells(Rows.Count, 1).End(xlUp)).SpecialCells(xlTextValues).Areas r.Offset(r.Rows.Count).Resize(1).Value = WorksheetFunction.Sum(r) Next End Sub >表毎の最終行に合計(SUM)したいのですが こんな感じのものかな。
その他の回答 (2)
- n-jun
- ベストアンサー率33% (959/2873)
>質問番号:4708445 は終りであれば閉じて下さい。 貼付けた後の事であれば、例えばA列の合計なら Sub try() With Range("A1", Cells(Rows.Count, 1).End(xlUp)) .Offset(.Rows.Count).Resize(1).Value = WorksheetFunction.Sum(Range(.Address)) End With End Sub でA列の最終行の1つ下に合計を表示できます。 それ以外については表構成が不明なのでわかりません。 ⇒表構成はシート上にどのように表が作られているか? A列が年度とか。2行目に項目行があり3行目以下にデータを貼付けるとか。
補足
>質問番号:4708445 は締切ました。 それと誠に申し訳ありません。表構成(行見出し)でなく、列見出しです。すみませんでした。 貼付後の表構成は、以下の通りです。 年度 お名前 ランク1 ランク2 金額 1 18 あああ 1 2 10 2 18 いいい 1 2 20 3 18 おおお 1 2 15 4 5 6 7 年度 お名前 ランク1 ランク2 金額 8 18 えええ 2 1 10 9 18 かかか 2 1 15 10 11 12 13 年度 お名前 ランク1 ランク2 金額 14 18 ききき 2 1 10 15 18 さささ 2 1 5 16 18 せせせ 2 1 20 17 18 けけけ 2 1 5 18 18 こここ 2 1 15 19 この表の最終行の下(4行目)に金額合計を表示、次の表の最終行(10行目)に金額合計を表示・・・としたいのです。表ごとに行数が変わるので合計行の取得に悩んでいます。 n-junさんのSub try()を上の表で、 With Range("E1", Cells(Rows.Count, 5).End(xlUp)) .Offset(.Rows.Count).Resize(1).Value = WorksheetFunction.Sum(Range(.Address)) として、実行したのですが、4行目に合計が表示されず、19行目に累計で表示されます。もともと、当方の質問が拙いためご迷惑をおかけしておりますが、引き続き、ご教示願います。
- web2525
- ベストアンサー率42% (1219/2850)
フィルターでの抽出は表示上の変更だけ (条件に合わない行は表示していないだけ) SUM関数だと表示されていないセルまで合計されます。 そのための関数としてSUBTOTAL関数が存在します。 マクロで最終行を求めた場合のセル行はフィルターに掛ける前の行番号と同じ行番号を示します。 フィルターを掛けた場合の合計値を求めるのであれば、データの最終行の下にSUBTOTALで合計を求める式を入れ、マクロ上でそのセル値を参照すれば良いだけです。 フィルターで表示行が変化しても集計セルの位置は変化しません。
お礼
n-junさん、早速の回答、本当にありがとうございました。 ご教示頂いたコードにより、表毎に合計を求めることができました。 web2525さんも、SUBTOTAL関数の存在を教えて頂き、ありがとうございました。