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

よろしくご教授下さい。

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル(マクロ記録)

よろしくお願いします。
エクセルで、印刷マクロを作ろうと考えています。
             (基本、入門者です)
マクロ記録で、作っていますが、
記録終了するたびに「 印刷 」がかかっては、
用紙が何枚あっても足りません。

いい考えがありましたら、お教えください。
お願いします。

Aベストアンサー

#3の回答者です。

>出来たら、この i=1 の意味を教えていただけませんでしょうか?
単に、それはページ数です。

ヘルプを引用します。(PrintOut で調べました)

式.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)

From オプション 印刷を開始するページの番号を指定します。この引数を省略すると、最初のページから印刷します。
To オプション 印刷を終了するページの番号を指定します。この引数を省略すると、最後のページまで印刷します。

と出てきます。

QExcel2003 マクロの進捗を表示するマクロ

長い処理をするマクロで、処理がされているのかフリーズしているのかわからないようなものがあります。
全体の処理で2分ほどかかるのですが、(Core2Duo 2Ghz)この間、「処理しています」というような、インストールをする際に出てくるような処理工程を表示するようなマクロを作ることは可能でしょうか?

Aベストアンサー

こちらのページが参考になります。

プログレスバーコントロールで進捗状況を表示するには?
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv9g1810.html

Qエクセル マクロコードの記述の勉強

独学でエクセルでのマクロのコード記述ができるようになりたいのですが、コードがかける人はどのようにしてかけるようになったのでしょうか?

プログラミング関係にはまったくの初心者なので、入門本を立ち読み程度読んでみたのですが、「面白そうだが、かなり手強そう」というような印象でした。

現実的な問題として、実際にコードをかける人は、プログラミング関係の学校等で学んだ人ぐらいしかいないのでしょうか?

めざすレベルはエクセルでこうしたいと考えたものを調べながらコードをかける程度のレベルです。

Aベストアンサー

> 実際にコードをかける人は、プログラミング関係の
> 学校等で学んだ人ぐらいしかいないのでしょうか?

そんな事ないです。私も独学で覚えましたから。

エクセルはマクロ記録がありますので、実際の操作を記録して書かれたコードを追っていったり、書き直したり出来ます。
VisualBasicEditor画面でコードにカーソルを置き、F1キーを押すとVBAヘルプ(たしか標準ではインストールされないので追加インストールの必要がある)が開くので、意味を調べたり、サンプルコードを見たりして覚えて行きました。
ネットにも沢山サンプルがありますし。

変数の使い方とforやif等を覚えてマクロ記録を直すだけでも結構便利になります。

QEXCEL2003 小数点の計算式

Windows XP EXCEL2003 を使用しています。

(1)-81028.566
(2)-80986.936
(3)-65422.635

上のような数字が入力されていて、
((1)-(2))×(3) の計算をしています。

EXCELで計算すると答えが

2723544.2950503

と表示されてしまいます。

(-81028.566 - (-80986.936) * -65422.635

(-81028.566 + 80986.936) * -65422.635

( )の中を計算すると-41.63

-41.63 * -65422.635 = 2723544.29505

となると思うのですがこの03はどうしてでてくるのでしょうか?

ご存知の方いらっしゃいましたらよろしくお願いいたします。

Aベストアンサー

十進数の小数を二進数に変換して計算するときによくある、「丸め
誤差」ですね。

(-81028.566)-(-80986.936)の時点で、-41.6300000000047000 に
なってしまいます。ここをそれぞれ1000倍してから引き算して1000
で割るように書き換えてやると、誤差のない-41.6300000000000000
になり、-65422.635を掛けると2723544.2950500000000000 が出てき
ます。引き算の後でroundしても大丈夫ですね。

Qエクセルについているマクロが出てこない・・・

 エクセルをひらき、ツール→マクロ→マクロでマクロの作成ができると聞きましたが、私のエクセル2002ではマクロのその機能が空欄状態です。復帰や回復できる方法を教えて下さい。

Aベストアンサー

(1)自分でマクロの記録を採る。
    ツールーマクロー新しいマクロの記録
(2)または他人がマクロの記録をとった。
   (3)他人がVBAコード(プログラム)を組んだ
    ツールーマクローVBEープログラム作成
場合に出てくる。(1)(2)(3)ともやっていないから、出てこないのは当然。
(1)なぞはマクロの画面でマクロー編集でコードが見れます。
ーーー
本でもWEBでも、マクロに関する本1冊か、「エクセル マクロ」でWEB照会して、勉強し。予備知識をえるべきです。

QEXCEL2003出納帳残高欄の、計算結果がある最終行の数値を取り出し

EXCEL2003出納帳残高欄の、計算結果がある最終行の数値を取り出したいのですが
    A     B     C     D
1  日付   入出金   残高
2  繰越          30
3 8/1   100   130
4 8/2  -130     0
5 8/2    40    40
6               -
7               -
8               -
9                現在残高 40       


途中には空白行はなく順に入力します
入力する行数は未確定です
残高は"0" の場合もあります

C列2行目は 数式「=B2」 
C列3行目から8行目までは 数式「=IF(B3=0,0,C2+B3)」

現在残高を表示したいのですが、
ここD列9行目には数式 「=LOOKUP(10^5,C3:C8)」 としてますが、
C列の6~8行目までは計算式が入ってるので、
その値”0”となってしまうようです。
また、
数式「=INDIRECT(ADDRESS(COUNT(C2:C8)+1,3))」
という式も入れてみましたが、”0”となってしまいます。

計算結果のある最終行の値 "40" にするにはどうしたらよいでしょうか?

EXCEL2003出納帳残高欄の、計算結果がある最終行の数値を取り出したいのですが
    A     B     C     D
1  日付   入出金   残高
2  繰越          30
3 8/1   100   130
4 8/2  -130     0
5 8/2    40    40
6               -
7               -
8               -
9                現在残高 40       


途中には空白...続きを読む

Aベストアンサー

=INDEX(C:C,COUNTA(A:A))
でどうでしょうか。

Qエクセル2010で作成したマクロ

エクセル2010で作成したマクロブックがあります。
このエクセルを知人にメールで送りました。

知人のエクセルは2007です。
マクロブックのフォームボタンを押しても何も動作しない状況との事です。

エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

素人の質問で申し訳ありませんが、ご指導お願いいたします。

Aベストアンサー

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイルの形式をマクロ有効ブックにして保存したのを送ったか再確認する
といったところをよく確認してください


先方に対してあなたが確認すべきポイントとしては、
○「何も起こらない」とは、具体的にどんな状況なのか再確認する
 ・ホントにうんともすんとも反応が無いということなのか
 ・実は何かエラーメッセージっぽいダイアログが現れて、OKをクリックしてもマクロが動作した様子が無いとかの状況では無かったか



具体的な状況が明らかになったら、ようやく対処を検討する事ができるようになります。
●そもそもどういうマクロを作成したのか、ご自分の作成したマクロをよく確認して、「反応が現れない」マクロを書いてたんじゃないのか再確認する
 たとえば無意味にon error resume nextのような仕込みをしてたりしないか
 たとえば不適切なデータに対して何も作動せずに終わってしまうようなそもそも作りにしてたんじゃないか
 とか。

●実は何かダイアログが出てたのなら、具体的にどんなダイアログなのか正確に聞き取って、あなたの方で対処を考える
 「マクロが無効になってる」のなら、マクロを有効にして実行するように伝える
 とか。

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイル...続きを読む

QEXCELで、「00:00:07秒」に「5秒」を足すという計算式を教え

EXCELで、「00:00:07秒」に「5秒」を足すという計算式を教えてください。 計算結果は、もちろん「00:00:12秒」になれば良いです。

Aベストアンサー

Excelでは、1日が1として計算されます。

1時間は1/24
1分間は1/24/60
1秒間は1/24/60/60

なので、5秒を足すなら、5/24/60/60を足せば良いです。

Qエクセルで作成したマクロが他のシートに反映しない

必要に迫られ始めてマクロをエクセル上で作成してみました。(初心者)
そのマクロを違うエクセルファイル上でも反映させたいのですが
マクロを作ったおおもと(最初)のファイルを閉じてしまうと違うエクセルファイルを開いてもマクロが反映されていません。
マクロでの命令内容としては 
エクセル上の数字の羅列→グラフ作成→上書き保存 という手順で作りました。
他のエクセルファイルも同じように数字の羅列があります。それを同じ作業(グラフ作成→上書き保存)したいのです。
一度作ったマクロを他のエクセルファイルにも反映させるにはどうしたら良いのでしょうか?
説明がわかりにくくてすみません。
よろしくお願いします。

Aベストアンサー

マクロの記録先を「個人用マクロブック」にするのが良いと思います。
一回マクロの記録を行い「保存先」を「個人用マクロブック」にします。するとPERSONAL.XLSという特別なブックが作成されます。

このブックの標準モジュールシートに先に作ったマクロを貼り付けてください。

そうすればエクセルを開くと、どのブックでもマクロが実行可能になります

QExcel2003で作成したマクロがExcel2007で上手く動かない。

以前、Excel2003を利用して工事写真帳を作成する方法を質問させていただきました。その後、工事写真帳は実用化して利用していますがWindows vistaのPCが増え、Excel2007でこの工事写真帳を使ってみたところ、次のような症状が起きてしまいます。どう訂正したら良いか教えていただければと思い再度投稿しました。

【仕様】工事写真帳は1シート構成、用紙1枚に3枚画像が入り、画像の右側には摘要欄があります。画像を読み込む位置をダブルクリックするとセルのサイズ(写真サイズに結合してあります)を取得して画像サイズを変更して格納します。
【問題点】ダブルクリックをすると読み込みたいセルより若干ずれた場所(左上寄り)に読み込まれます。2枚目以降ダブルクリックをすると1枚目の画像の上に重なった状態で読み込まれてしまいます。

コードは次の通りです。ぜひアドバイスをお願いします。


Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

Dim pict As String

gyo = ActiveCell.Row 'クリック行の取得
retu = ActiveCell.Column 'クリック列の取得

If retu = 3 Then

Set scel = Cells(gyo, retu)
scel.Select 'セルサイズの取得
w = Selection.Width
h = Selection.Height


fname = Application.GetOpenFilename _
("画像ファイル,*.gif;*.jpg;*.bmp", 1, "画像ファイルを指定して下さい") '画像読込
If fname = False Then
Exit Sub
End If


ActiveSheet.Pictures.Insert(fname).Select
pict = Selection.Name
With ActiveSheet.Shapes(pict) '画像のサイズ変更
.LockAspectRatio = False
.Placement = xlFreeFloating
.Placement = xlMove
.Width = w
.Height = h
End With


Range("F" & gyo).Select '摘要欄へ移動

End If

End Sub

以前、Excel2003を利用して工事写真帳を作成する方法を質問させていただきました。その後、工事写真帳は実用化して利用していますがWindows vistaのPCが増え、Excel2007でこの工事写真帳を使ってみたところ、次のような症状が起きてしまいます。どう訂正したら良いか教えていただければと思い再度投稿しました。

【仕様】工事写真帳は1シート構成、用紙1枚に3枚画像が入り、画像の右側には摘要欄があります。画像を読み込む位置をダブルクリックするとセルのサイズ(写真サイズに結合してあります)を取得して...続きを読む

Aベストアンサー

参考URLにあるように、TopとLeftを指定する必要があるようです。

ここではAddPictureメソッドを使用してみました。

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'クリックしたセルやシートは変数に格納されています。

Dim pict As Shape
Dim fname

With Target
If .Column <> 3 Then Exit Sub
fname = Application.GetOpenFilename _
("画像ファイル,*.gif;*.jpg;*.bmp", 1, "画像ファイルを指定して下さい") '画像読込
If fname = False Then Exit Sub
Set pict = Sh.Shapes.AddPicture(Filename:=fname, linktofile:=True, _
SaveWithDocument:=True, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
pict.LockAspectRatio = False
pict.Placement = xlMove
.Offset(, 3).Select '摘要欄へ移動
End With

End Sub

参考URL:http://park.geocities.jp/tryvba/excel2007question.html#4

参考URLにあるように、TopとLeftを指定する必要があるようです。

ここではAddPictureメソッドを使用してみました。

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'クリックしたセルやシートは変数に格納されています。

Dim pict As Shape
Dim fname

With Target
If .Column <> 3 Then Exit Sub
fname = Application.GetOpenFilename _
("画像ファイル,*.gif;*.jpg;*.bmp", 1, "画像ファイルを指定して下さい") '画像読込
If fn...続きを読む


人気Q&Aランキング