ExcelVBAについて

たとえばA列が30行ある帳票なんですが、セル(A30)にはA1~A29の合計を表示し、2ページ目のセル(A60)にはA1~A59の合計を表示したいです。このときセルA(60)の数式は「=SUM(A1:A29,A31:A59)」となります。2ページまでなら良いのですが1000ページくらいになると「=SUM(A1:A29........)と数式が長くなってエクセルの数式の限界(ネットで調べると長さが1024までとありました)まで行ってしまいます。
そこで数式を=SUM(A1:A5999)のように生成するようにしても、途中のページごとの小計が合計に合算されてうまくいきませんし、小計部分のセルをあとから引こうと考えると今度また数式が長くなってしまいます。何か良い方法はあるでしょうか。
ExcelVBAの中で値の合計を計算をして直接セルに設定する方法は思いつくのですが、他の事情との兼ね合いでやりたくありません。セルに設定する数式を短くする手段で(実現できれば)お願いします。たとえばオフセット(?)のような記述が数式でできないのかなあと

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/09/09 23:29:47
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:y3b5 No.2

回答回数32ベストアンサー獲得回数3

ポイント50pt

SUBTOTAL関数を使ってはどうでしょうか?


A30のセルに「=SUBTOTAL(9,$A$1:A29)」と書きます。

A60のセルの場合は「=SUBTOTAL(9,$A$1:A59)」です。


(A30のセルからコピーペーストで数式が希望通りに反映されるかと思います。)

id:dedara

なんかずばりの関数っぽい‥使ってみます。ありがとうございました

2008/09/09 07:54:37

その他の回答1件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント20pt

ExcelVBAで解決したいというご質問でしょうか、それともExcel関数に関するご質問でしょうか。


ExcelVBAで解決する方法

小計行を60行おきに設定するということでしたら、For~Nextステートメントを二重に――外側で総合計(60の倍数行)を、内側で小計のループ(60行)を――回せばいいでしょう。


Excel関数で解決する方法

B列に小計を置くことはできませんか?

この場合、A列の60, 120, 180‥‥行は空白となり、B列の60, 120, 180‥‥行に小計が入る形になります。

id:dedara

わかりづらくてすみません。

セルに設定する数式で解決したいのでExcel関数ですね。

ただ数式を動的にExcelVBAで作っています。

最初の方法は、ExcelVBA内でループで合計を計算してセルに直接値を設定する方法ということですよね。これは他の事情があって採用できません。

2番目の方法もB列に小計を置くことができません。

できないだらけですが。

数式の工夫だけでなんとかできないでしょうか。

追記

勘違いしていました。ループで数式を設定するということですね。ただ小計行はページ単位の小計でなく最初のページからの小計になります。でも小計を合計する、という考え方でできそうです‥思い付かなかったorz

2008/09/09 07:47:26
id:y3b5 No.2

回答回数32ベストアンサー獲得回数3ここでベストアンサー

ポイント50pt

SUBTOTAL関数を使ってはどうでしょうか?


A30のセルに「=SUBTOTAL(9,$A$1:A29)」と書きます。

A60のセルの場合は「=SUBTOTAL(9,$A$1:A59)」です。


(A30のセルからコピーペーストで数式が希望通りに反映されるかと思います。)

id:dedara

なんかずばりの関数っぽい‥使ってみます。ありがとうございました

2008/09/09 07:54:37
  • id:kn1967
    =SUBTOTAL(9,$A$1:INDIRECT("R[-1]C",FALSE))

    A29やA59といったようにページ毎に書き換える必用がなくなりますので、ご利用あれ。
  • id:gkkj

    単純に、

    (A30)=SUM(A1:A29)

    (A60)=SUM(A31:A59)+A30

    (A90)=SUM(A61:A89)+A60

    ...(以下A60のコピーペースト)

    で実現できるんでは。subtotalの方がエクセル関数の活用という点で断然エレガントですが。
  • id:dedara
    >kn1967さん
    コメントにて
    ありがとうございます。そのまま使ってみようと思います。

    >gkkjさん
    pahooさんの回答を読んでその発想に至りました。
    今回はsubtotal関数を使ってみようと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません