人生のプチ美学を教えてください!!

Excel2003を使用しています。
マクロで、伝票を追加して行き、追加する度に合計のセルにある計算式を
前の伝票の計算式と合算させたいのですが、うまく行きません。

1枚目の合計 =Sum(A4:A17)
2枚目の合計 =Sum(A22:A35)+1枚目の合計
3枚目の合計 =Sum(A40:A53)+1枚目の合計+2枚目の合計
※合計の計算式は18行毎に入ります。

伝票の枚数は決まっていませんので、何枚追加しても合算出来る様にと考えています。

Formulaを使ってセルの計算式を取得し、2枚目の計算式と合算は出来るのですが、
3枚目4枚目となっていく時の記述がイマイチうまく出来ません。

sikiA = Range("A18").Formula ←1枚目の合計
siki1 = sikiA & "+" & Cells(18 * cnt, 1) ←2枚目の合計と1枚目の合算
※「cnt」は伝票の枚数です。

sumの部分は、伝票の追加の時点で計算式が入ります。
なので、伝票をコピー&貼り付けした時点で、合算している計算式を入れてしまった方が
良いのかなとは思いましたが、思うように行っていません。

よろしくご教授下さい。

A 回答 (3件)

1枚目の合計式を


=SUBTOTAL(9,A4:A17)
2枚目の合計式を
=SUBTOTAL(9,A4:A35)
3枚目の合計式を
=SUBTOTAL(9,A4:A53)
とします。

「=SUBTOTAL(9,A4:A」まで共通なので
セル.formula = "=SUBTOTAL(9,A4:A" & セル.row -1 &")"
といった具合になります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

SUBTOTAL関数の存在をすっかり忘れていました。

keithinさんの回答で、光明が見えて来たので、ベストアンサーさんにさせて頂きます。

お礼日時:2011/04/16 20:08

仕組みの記述が不完全ではないか。


>1枚目
シートを増やしていっているのか?。
質問の望みの計数はどのシートの、何処のセルに入れるのか、質問に書いてあるか?
==
1シートが伝票1枚に対応し、
その伝票のシートの何処かのセルを足したいのではないか。
その足すセルは一定の場所のセルにあるのではないのか。各シートで(多分変わるのは行で、列は一定だろう)移動するのか?
>sikiA = Range("A18").Formula ←1枚目の合計
siki1 = sikiA & "+" & Cells(18 * cnt, 1) ←2枚目の合計と1枚目の合算
は集計シートのようなもので、各伝票シートとは独立したシートではないのか。
===
上記は私の誤解もあるかもしれないが、
一般論としても、エクセルの質問は、いつも
ブック
シート
列・行
セル
が何処のことを言っているのか明確にして、質問されたい。
==
普通は各シートを読んで足していくような方式を考えるのではとおもう。
For Each Sh In Worksheets
のやり方は知っていて、本件やっているのか。

この回答への補足

質問の不備があり申し訳ありません。

>シートを増やしているのか?
 いいえ、シートではありません。
 1つのシートに「伝票追加」をすることで行を増やして(移動して)いっています。
 お察しの通り、列は一定です。

>集計シートのようなもので・・・
 いいえ、集計シートではありません。
 伝票のテンプレートを別シートからコピーしていますが、当該シートは入力専用伝票です。
 ユーザー側からの依頼で、入力伝票を個々に印刷にも使いたいと言う事で、
 1シートに複数枚の伝票と言う形をとっています。

>普通は各シートを読んで足していく・・・
 上述した様に、ユーザーからの要望もあったのと、1日に扱う伝票の量が大量な為、
 1枚の伝票=1シートと言う形は取れませんでした。


他に不備あればご指摘下さい。

補足日時:2011/04/16 19:44
    • good
    • 0

Sub test()


Dim page As Integer


Dim sumpara As String
Dim calc As String

For page = 1 To 5
sumpara = "A" & (4 + (page - 1) * 18) & ":A" & (17 + (page - 1) * 18)

calc = "=Sum(" & sumpara & ")"
If page > 1 Then
calc = calc & " + A" & (page - 1) * 18
End If
Range("A" & (page * 18)).Formula = calc
Next

End Sub
これでいかがでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

動作させた所、2枚目の伝票の合計に1枚目の合計も足されている計算式が追加されますが、
3枚目、4枚目と追加してもこの記述だと、あくまでも前の伝票の合計が足されて行くだけで

私の考えている
3枚目の伝票に「3枚目の合計+2枚目の合計+1枚目の合計」
4枚目の伝票に「4枚目の合計+3枚目の合計+2枚目の合計+1枚目の合計」
にはなりません。

#2さんの回答でなんとなく光明が見えて来たので、申し訳ありませんが
今回は、#2さんをベストアンサーさんにさせて頂きます。

お礼日時:2011/04/16 20:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!