- ベストアンサー
Excelマクロで伝票の合計計算式を足していく方法
- Excel2003を使用している場合、マクロを使用して伝票を追加する度に合計のセルにある計算式を前の伝票の計算式と合算する方法がわかりません。Formulaを使ってセルの計算式を取得し、2枚目の計算式と合算はできるのですが、3枚目以降の計算式の記述がうまくいきません。
- 伝票の枚数は決まっていないため、何枚追加しても合算できるようにしたいと考えています。伝票をコピー&貼り付けする際に合算している計算式を入れる方法も考えましたが、うまくいきません。Excelマクロの専門家の方々からのアドバイスをお待ちしています。
- Excelマクロを使用している際に、伝票を追加する度に合計のセルにある計算式を前の伝票の計算式と合算する方法について教えてください。伝票の枚数は可変であり、何枚追加しても合算できるようにしたいです。また、Excel2003を使用しています。
- みんなの回答 (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 &")" といった具合になります。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
仕組みの記述が不完全ではないか。 >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シートと言う形は取れませんでした。 他に不備あればご指摘下さい。
- kokorone
- ベストアンサー率38% (417/1093)
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 これでいかがでしょうか?
お礼
回答ありがとうございます。 動作させた所、2枚目の伝票の合計に1枚目の合計も足されている計算式が追加されますが、 3枚目、4枚目と追加してもこの記述だと、あくまでも前の伝票の合計が足されて行くだけで 私の考えている 3枚目の伝票に「3枚目の合計+2枚目の合計+1枚目の合計」 4枚目の伝票に「4枚目の合計+3枚目の合計+2枚目の合計+1枚目の合計」 にはなりません。 #2さんの回答でなんとなく光明が見えて来たので、申し訳ありませんが 今回は、#2さんをベストアンサーさんにさせて頂きます。
お礼
回答ありがとうございます。 SUBTOTAL関数の存在をすっかり忘れていました。 keithinさんの回答で、光明が見えて来たので、ベストアンサーさんにさせて頂きます。