激凹みから立ち直る方法

エクセルVBA初心者です。

以下のVBAの記述をお教えいただきたく思います。
かなり検索を行ったのですが、しっくりと理解できませんでした・・。

シート1とシート2があり、シート2における足し算結果をシート1に反映させる、というだけのことなのですが・・

例えば、シート1のA1セルに「=SUM(シート2!A1:A*)」の結果をマクロで反映させたいのです。
シート2におけるsum関数は、データ数が変動するので仮にA1から「A*」と仮にしていますが、
このことを踏まえた場合のVBAの記述はどのようになるのでしょうか。

お教え下さい、よろしくお願い致します。

A 回答 (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
    • good
    • 0
この回答へのお礼

解決しました!

例1に近い記述で自分も書いていたのですが、エラーが出まくってしまい、検索を行っても何が悪いのか分かりませんでした。

しかし、いただいた答えと見比べてみますと、カッコをつけなくていいところでつけていたり、といった基本的な部分での理解ができていなかったことが原因でした。

ありがとうございました。

お礼日時:2011/09/28 14:07

解決方法のその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
といった具合なので,憶えておいてください。
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございました。

「SUM(Sheet2!A:A)」これで解決だったのですが、変に考え込んでしまい、基本が出来ていないのにend(xlup).rowを組み込んでいたりしてドツボにはまっていました。

英語や少々難しい漢字のように「読むだけなら大まかな意味が分かるが、いざ書こうと思ったらかけない」状態でした。

お礼日時:2011/09/28 14:14

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