- ベストアンサー
Excel2000で範囲内の合計を簡単に出す方法
- Excel2000で範囲内にあるデータの合計を簡単に出す方法を知りたいです。
- 現在は毎日SUM関数を使って合計を出していますが、もっと簡単な方法があれば教えてください。
- また、合計を表示するセルの最終行を柔軟に設定する方法も知りたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
データ単位はいつも2行として、2行単位でコピーしています。 最終行を求めたら、それは2行を1行にした上の行なので、貼り付け先の行は+2すればいい事になります。 L列には余分な操作はしません。 コピーしているのはA~K列です。あっていればいいんですが・・・・・ Private Sub CommandButton1_Click() Dim maxRow As Long Dim cRow As Long Dim col As Integer maxRow = 7 For col = 1 To 11 cRow = Cells(65536, col).End(xlUp).Row If maxRow < cRow Then maxRow = cRow Next Range("H1") = Application.Sum(Range("H7:H" & maxRow)) Range("A1:K2").Copy Cells(maxRow + 2, 1).Select '2行単位なので書き込み行は2行下 ActiveSheet.Paste Application.CutCopyMode = False Cells(maxRow + 2, 1).Select End Sub
その他の回答 (3)
- nishi6
- ベストアンサー率67% (869/1280)
>ごまかしをやらずに出来ませんか。よろしくお願いします。 できると思いますが、なにぶん、何を行いたいのか全体が理解できていません。少し補足して下さい。 1.質問ではRange("A1:K2")をコピーしています。 しかし1行目に合計を表示しているのはH列だけです。A~Kをコピーする意味は A~K全てH列と同じことをされているわけですか?(A~K列すべてH列のように合計計算をしている) 2.1、2行目を最終行にコピーしていますが、1行目と最終行に両方書いてしまえばコピーする必要が なくなるような気がしますが,書き込んだらダメですか。 3.#2の補足に『最終行がセル結合していて』とありますが、質問には『シートは毎日違いますが』とあります。 なぜ、最終行が結合されているのでしょうか。結合セルはK1とK2みたいですが、K1とK2は最初から結合されていて、 1、2行目をコピーすることで結合セルが下のほうにできるわけでしょうか。 K1とK2は最初結合させている →コピーして最終行に書く →結合セルが下に発生 →データを消して再入力(ア) →結合セルの行が最終行になることがある →最終行をコピーする時点でエラー発生 のようなことでしょうか。 そうなら、(ア)の時点で、入力する箇所の結合を解除すればいいでしょう。 4.K1とK2は結合されている必要があるとして、K1とK2をコピーする時、コピー先も結合する必要が あるのでしょうか。 例えば、K1とK2を20、21行目にコピーする時、K1を20行目にコピーするだけではダメですか。 5.A1:K2をコピーしていますが、2行目までコピーしているのは、K1とK2が結合されているからですか。 >L列に適当な一文字を入れL列のフォントを白にしてA列~K列として使用しています。 この意味はほとんど分かりません。
補足
説明不足ですみません。もう少し詳しく書きます。表ですが、セルを結合して2行を1行として使用しています。5,6行目が項目で7行目(7,8行目)からデータが入ります。データも貼り付けで別のシートからもらってA列からL列(1行「実際は2行」)に貼り付けます。後は、このパタンでデータが入っていきます。H列が数字のデータです。最後に合計を表示するのですが、H列の最終行に書いた後左右隣の行を飾り付けするのがマクロでは大変だと思い、A1~L2で作っておいてH1,H2(H1)セルに合計を書き最終行の次にコピーしています。A1~L2は、非表示にしています。最終行をL列とする為です。L列のみセル結合はしていません。文字も白にしています。 よろしくお願いします。
- nishi6
- ベストアンサー率67% (869/1280)
やりたい事はこんなことですか。最後のコピーの意図が分かりませんが。 Private Sub CommandButton1_Click() Dim maxRow As Long Dim cRow As Long Dim col As Integer maxRow = 7 For col = 1 To 11 cRow = Cells(65536, col).End(xlUp).Row If maxRow < cRow Then maxRow = cRow Next Range("H1") = Application.Sum(Range("H7:H" & maxRow)) Range("A1:K2").Copy Cells(maxRow + 1, 1).Select ActiveSheet.Paste Application.CutCopyMode = False Cells(maxRow + 1, 1).Select End Sub
補足
思ったように出来ています。一つだけ気づいたことがあります。最終行がセル結合していてそのセル結合した中にデーターがあるとエラーがでます。つまり、A1~K2の中にセル結合があります。K1とK2で、データーも入っています。今ごまかしでA列~K列をA列~L列にして使用しています。L列に適当な一文字を入れL列のフォントを白にしてA列~K列として使用しています。ごまかしをやらずに出来ませんか。よろしくお願いします。最後に書いたマクロはここまで出来ていますと言うことです。
- imogasi
- ベストアンサー率27% (4737/17069)
(1)range("a:b").CurrentRegion.Lows.Countなどとやると、A列が3行まで、B列が4行まで、C列が6行までデータが入っているとして、6と出てしまいますね。お困りの点は判りました。 (2)第1行目に合計をセットするなら、 =sum(a2:a30)関数は,例えA20~A30までに数値が入ってなくても エラーにはならず、A1からA19までの数値を加えてくれるので、A30を適当な行数にしておけば、本件のような質問の必要性はなくなるのではないでしょうか。 (3)データ入力最終行の直ぐ下行にその列の合計を出すのも、各列で合計の表示セルが異なり、私の仕事の経験から、見にくいと思いますので合計行は同じ行にされては。 (4)データ入力最終行の直ぐ下行にその列の合計を出すのなら、 極く初歩的に Sub test01() Set wf = Application.WorksheetFunction For j = 1 To 2 '2は適当 For i = 1 To 50 '50は適当 If Worksheets("sheet1").Cells(i, j) = "" Then Worksheets("sheet1").Cells(i , j) = wf.Sum(Range(Cells(1-1, j), Cells(i - 2, j))) ' MsgBox i Exit For End If Next i Next j を作って見ましたが、上手くやらないと、2回目以降が危険で、前回の合計まで加えてしまうおそれあり。毎回各列入力終了後、前回合計が残っていない前提なら、上記で、直ぐ下の行に合計が出せます。
お礼
完璧です。どうもありがとうございます。また、よろしくお願いします。カズミ