たとえば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の中で値の合計を計算をして直接セルに設定する方法は思いつくのですが、他の事情との兼ね合いでやりたくありません。セルに設定する数式を短くする手段で(実現できれば)お願いします。たとえばオフセット(?)のような記述が数式でできないのかなあと
SUBTOTAL関数を使ってはどうでしょうか?
A30のセルに「=SUBTOTAL(9,$A$1:A29)」と書きます。
A60のセルの場合は「=SUBTOTAL(9,$A$1:A59)」です。
(A30のセルからコピーペーストで数式が希望通りに反映されるかと思います。)
ExcelVBAで解決したいというご質問でしょうか、それともExcel関数に関するご質問でしょうか。
小計行を60行おきに設定するということでしたら、For~Nextステートメントを二重に――外側で総合計(60の倍数行)を、内側で小計のループ(60行)を――回せばいいでしょう。
B列に小計を置くことはできませんか?
この場合、A列の60, 120, 180‥‥行は空白となり、B列の60, 120, 180‥‥行に小計が入る形になります。
わかりづらくてすみません。
セルに設定する数式で解決したいのでExcel関数ですね。
ただ数式を動的にExcelVBAで作っています。
最初の方法は、ExcelVBA内でループで合計を計算してセルに直接値を設定する方法ということですよね。これは他の事情があって採用できません。
2番目の方法もB列に小計を置くことができません。
できないだらけですが。
数式の工夫だけでなんとかできないでしょうか。
追記
勘違いしていました。ループで数式を設定するということですね。ただ小計行はページ単位の小計でなく最初のページからの小計になります。でも小計を合計する、という考え方でできそうです‥思い付かなかったorz
SUBTOTAL関数を使ってはどうでしょうか?
A30のセルに「=SUBTOTAL(9,$A$1:A29)」と書きます。
A60のセルの場合は「=SUBTOTAL(9,$A$1:A59)」です。
(A30のセルからコピーペーストで数式が希望通りに反映されるかと思います。)
なんかずばりの関数っぽい‥使ってみます。ありがとうございました
なんかずばりの関数っぽい‥使ってみます。ありがとうございました