- ベストアンサー
エクセルVBA 他シートのSUM関数結果の反映
エクセルVBA初心者です。 以下のVBAの記述をお教えいただきたく思います。 かなり検索を行ったのですが、しっくりと理解できませんでした・・。 シート1とシート2があり、シート2における足し算結果をシート1に反映させる、というだけのことなのですが・・ 例えば、シート1のA1セルに「=SUM(シート2!A1:A*)」の結果をマクロで反映させたいのです。 シート2におけるsum関数は、データ数が変動するので仮にA1から「A*」と仮にしていますが、 このことを踏まえた場合のVBAの記述はどのようになるのでしょうか。 お教え下さい、よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>しっくりと理解できませんでした・・。 ⇒どの辺がしっくりこないかを質問した方が今後の為と思えますが如何でしょうか。 一例です。 例1.Range("A1").Formula = "=Sum(Sheet2!A:A)" ’SUM関数の代入 例2.Range("A1").Value = Application.Sum(Sheets(2).Range("A:A")) 'SUM関数で処理 例3.For~Nextでループ加算 With Sheets("sheet2") For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row wk = wk + .Cells(i, "A") Next End With Range("A1").Value = wk
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
解決方法のその1: VBAにする必要もありません。最初からシート1に =SUM(Sheet2!A:A) と書いておくだけのことです。 「データ数が不明」だと何が困るのか状況説明が書いてないので具体的な提案が出来ませんが,仮にたとえばシート2の最終行には「総計」があるので合計に含みたくないなら =SUM(Sheet2!A:A)/2 のようにしておくこともできます。 解決方法のその2: 理由は聞きませんがどうしてもマクロが使いたいなら sub macro1() with worksheets("Sheet1").range("A1") .formula = "=SUM(Sheet2!A:A)" .value = .value end with end sub などのような書きぶりで値化する手がお奨めです 解決方法その3: 最後の行の調べ方の定石は sub macro2() dim r as long r = worksheets("Sheet2").range("A65536").end(xlup).row worksheets("Sheet1").range("A1").formula = "=SUM(Sheet2!A1:A" & r & ")" end sub といった具合なので,憶えておいてください。
お礼
ご回答いただきありがとうございました。 「SUM(Sheet2!A:A)」これで解決だったのですが、変に考え込んでしまい、基本が出来ていないのにend(xlup).rowを組み込んでいたりしてドツボにはまっていました。 英語や少々難しい漢字のように「読むだけなら大まかな意味が分かるが、いざ書こうと思ったらかけない」状態でした。
お礼
解決しました! 例1に近い記述で自分も書いていたのですが、エラーが出まくってしまい、検索を行っても何が悪いのか分かりませんでした。 しかし、いただいた答えと見比べてみますと、カッコをつけなくていいところでつけていたり、といった基本的な部分での理解ができていなかったことが原因でした。 ありがとうございました。