人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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の中で値の合計を計算をして直接セルに設定する方法は思いつくのですが、他の事情との兼ね合いでやりたくありません。セルに設定する数式を短くする手段で(実現できれば)お願いします。たとえばオフセット(?)のような記述が数式でできないのかなあと

●質問者: dedara
●カテゴリ:コンピュータ インターネット
✍キーワード:A1 エクセル オフセット セル ネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●20ポイント

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


ExcelVBAで解決する方法

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


Excel関数で解決する方法

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

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

◎質問者からの返答

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

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

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

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

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

できないだらけですが。

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

追記

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


2 ● y3b5
●50ポイント ベストアンサー

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


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

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


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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ