• ベストアンサー

VBAで、行数が変化する表の合計を求めたい。No2

質問番号:4708445で回答頂きありがとうございます。引き続き申し訳ありません。 質問内容が文字数制限を意識する余り、舌足らずとなっておりました。  表構成(行見出し)は以下の通りです。   年度・お名前・ランク1・ランク2・金額 (ランクは1~4) このような複数の表をランク1、ランク2でフィルタ抽出(ランク1=1、ランク2=1等)し、抽出結果を集計シートに転機します。転記する際にラスト行を取得して合計を求めるのですが、抽出ランクにより、表毎に抽出先の数は変化(よって抽出行は可変する)します。抽出条件を変えるため、結果、集計シートは、上記行見出しは同じですが、行数は異なる表が複数貼付られます。貼付時、第1の表から3行下空白で第2の表以下を貼付します。その後、表毎の最終行に合計(SUM)したいのですが、表現が稚拙で申し訳ありませんでした。  SUBTOTAL関数ですと、第1の表の合計セルの式をコピペで行うようになると思いますが、ここ作業をVBAではできないのでしょうか?

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.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)したいのですが こんな感じのものかな。

ssstandc
質問者

お礼

n-junさん、早速の回答、本当にありがとうございました。 ご教示頂いたコードにより、表毎に合計を求めることができました。 web2525さんも、SUBTOTAL関数の存在を教えて頂き、ありがとうございました。

その他の回答 (2)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

>質問番号: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行目以下にデータを貼付けるとか。

ssstandc
質問者

補足

>質問番号: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)
回答No.1

フィルターでの抽出は表示上の変更だけ (条件に合わない行は表示していないだけ) SUM関数だと表示されていないセルまで合計されます。 そのための関数としてSUBTOTAL関数が存在します。 マクロで最終行を求めた場合のセル行はフィルターに掛ける前の行番号と同じ行番号を示します。 フィルターを掛けた場合の合計値を求めるのであれば、データの最終行の下にSUBTOTALで合計を求める式を入れ、マクロ上でそのセル値を参照すれば良いだけです。 フィルターで表示行が変化しても集計セルの位置は変化しません。

関連するQ&A

  • VBAで、行数が変化する表の合計を求めたい。

     前にあった質問(質問番号730576)の回答で、ラスト行を取得して合計を求めるコードを拝見しました。  今回の質問は、複数の表が貼付された場合で、第1の表のラスト行に合計を求めるのは上記方法で可能ですが、第2以降の表に合計を求める方法がわかりません。各表は、フィルタ抽出のため抽出データ(行)が可変するため、行頭が変化するため、うまくいかず困っています。どなたか、教えて下さい。

  • エクセルで3次元の表を作りたい

    1シート上に複数の2次元の表(通常のエクセルの表のことです)がたとえば3個有り(この表はそれぞれ同じ行・列をもつ同じ形式の表です)、 その3個の表の対応するセルの内容を合計の表として、同一シート内に作りたいのです。 1個の表に数量を入力すると、合計の表にも集計されるようにする。 集計の計算式は簡単ですが、表の個数が多くなると1個1個式を書くのは時間が掛かるので、何かテクニックで解決できないか?が質問の要旨です。 添付画像は支社A~Cが、その3個の表を示します。 作りたいのは黄色で示した表です。それぞれ支社・商品・入荷数毎の対応するセルの合計を全体の集計表としたい。 解りにくいと思いますが、宜しくお願いします。

  • エクセルマクロで表の途中の集計行と合計行追加

    こんなことできますか? エクセルの表が各シートに一つずつあります。 B列からR列まで使用しています。 始まりは3行目で見出し行です。 データは4行目以降ですが、これは各シートごとに最終行は異なります。だいたい120行から200行程度です。 途中に空白はありません。 この表はS列の数値(12種類)により分類され並べ替えてあります。 やりたいのは、S列の数値を見て、分類(同じ数字)ごとに集計する行を追加したいのです。 集計する列は、D~K列だけです。 そして、最終行に全部の合計も出したいのです。 ただ、量が多いのと、頻繁に行なう作業なのでマクロでささっと出来ないかと思います。 どなたかどうすればよいか教えてください。 なにとぞお願いします。

  • 表からの合計

    お世話になります、集計についてお教えください。 上段のような表があります。そしてこれを下段のような数字を合計した表に組み替えたいと思います。 この下段の表の黄色い部分に入れる数式を考えています。 上段の表に合計を示す行と列を挿入すればsumifを活用することで出来るかと思うのですが、できれば上段の表は生データとして触らないようにしたいのです。 また、実際のデータはかなりの行と列の数となっており、構成要素も多岐にわたるので手作業を加える相対参照などは避けたいと思っています。 加えて、今後の活用の点からもピボットなどの機能ではなく、関数を組み合わせた数式で処理したいと思っています。 どのようにすればよいかお教えくだされば幸いです。 A A B B あ 1 2 3 4 あ 5 6 7 8 い 9 10 11 12 い 13 14 15 16 い 17 18 19 20 A B あ い

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

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

  • オートフィルタ で抽出した結果の合計(SUBTOTAL)

    データ抽出機能 (オートフィルタ) で抽出した結果をSUBTOTAL関数で合計を出しました。10項目ぐらいあるうち3項目のみ合計が1だけ違って表示されてしまいます。残りの7項目は、ぴったり合計で表示されています。例えば、合計額-487,531のはずが、487,530。666,363のはずが、666,362と表示されてしまいます。現在、SUBTOTAL(9,D2:D37)の書式を使用していますが、1合わない合計数は、どのようにすれば、修正できますか?教えてください。

  • ACCESSのVBAにてExcelに行を追加したい

    Excelのシートは、見出しを固定にし、表があり、最後に合計となっています。 複数ページにまたがる場合は、最後のページに合計を印刷するので、データが表をオーバーする場合、行の挿入を行いたいのです。 方法はありますでしょうか?

  • Access2003を使ってデータの相対表が欲しいです

    アクセス初心者です。 質問なのですが、一つのテーブルデータから あるパターンに当てはまるデータの数を集計したい場合 手順はどのように踏めばいいでしょうか。 例) テーブル構成→ 【フィールド】  月 / 日 / IN / OUT / 種類 / etc....(そのほかのデータ) 【データ】  1 / 1 / 100 / 200 / A / etc....  1 / 2 / 200 / 100 / B / etc....  1 / 3 / 100 / 300 / B / etc....  ・ ・ ・ ・  ・ ・ ・ ・  ・ ・ ・ ・  1 / 31 / 300 / 100 / B / etc....  のように続く。 この中から 【1/1~15日の間で、100でINし200でOUTしたBの数】 を調べて自動的に演算した結果を表示させたい場合、 どういった手順を踏めばいいでしょうか‥? 「クロス集計クエリ」を使ってみたのですが、 行見出しに「IN」列見出しに「OUT」を設定しても 思うように合計の値が出てきません。 イメージでは最終的にこんな相対表を作りたいので、 行、列各数値それぞれの対応した合計値が欲しいです。 ↓↓↓  OUT 100 / 200 / 300 / 計 IN 100/  -  ○○ ○○ ○○ 200/  ○○  -  ○○ ○○ 300/  ○○ ○○  -  ○○ 計/  ○○ ○○ ○○  - 申し訳ないのですが、やり方を どなたかご教授願えないでしょうかm(_ _)m

  • SUBTOTAL関数

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

  • エクセル2010 表の作成、コピペについて

    1つのシートに30社の業者に依頼している商品リストがあります。 それには業者名、商品名、寸法、価格、発注数が記載されています。 それを業者ごとに分けて作成します。 表は10行ごとに太い線をひきます。 1ページに31行です。 31行目は小計もしくは合計です。 2ページ、3ページと同じように続きます。 業者によってページ数はさまざまです。 フィルタをかけたデータを一社ずつコピー後、表に値貼付をしています。 しかし、データによっては数値が赤になっていたり取り消し線また太字になっています。 それに気づかずすべてを値貼付してしまい、すべての書式がきえてしまい、後で ひとつずつ書式を直していきました。 10行ごとに太線をひいた表をそのまま用いるためには値貼付をしないと私はうまく できません。。。 表はそのまま使い、データもそのまま貼り付ける方法を御教授ください。 宜しくお願い致します。

専門家に質問してみよう