- ベストアンサー
EXCEL VBA SUM関数利用時?
EXCEL2000にて kakikomi→セル行数の変数です 5列、2行に入力されている数値を加算して 3行目(結合セル)に答えを出したいため 下記のように書き込みました。 計算は実行できるのですが 長文になってしまい修正などがあった場合困ると思います もっと見やすく、修正も楽なようにするには どの様にすれば宜しいでしょうか? ActiveSheet.Cells(kakikomi + 3, 2) = Application.WorksheetFunction _ .Sum(Cells(kakikomi, 2), Cells(kakikomi, 3), Cells(kakikomi, 4), Cells(kakikomi, 5), Cells(kakikomi, 6) _ , Cells(kakikomi + 2, 2), Cells(kakikomi + 2, 3), Cells(kakikomi + 2, 4), Cells(kakikomi + 2, 5), Cells(kakikomi + 2, 6)) 宜しくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 別にどう書いてもよいけれど、基本的にで、親オブジェクトは忘れないようにしてください。 変数を使っているなら、必ず、変数は宣言から表示させるようにしてください。 >長文になってしまい修正などがあった場合困ると思います マクロの場合は、全体的に分からなくなっても仕方がないですが、修正が予想される場合は、その部分だけを抜き出しておくことが、基本的な書き方です。定数の場合は、Const を使いますが、今回は、Object にしました。 '------------------------------------------- 'Excel では、標準モジュールを使います。 '------------------------------------------- Sub MacroTest1() Dim i As Long '←通常は、Long型 Dim Rng As Range i = 1 '変数の初期値 With ActiveSheet '親オブジェクト '範囲のベースになる部分(修正可) Set Rng = .Range(.Cells(i, 2), .Cells(i, 6)) .Cells(i + 3, 2).Value = WorksheetFunction.Sum(Rng, Rng.Offset(2)) '.Value のプロパティは忘れないこと End With Set Rng = Nothing 'オブジェクトの解放 End Sub
その他の回答 (4)
- rivoisu
- ベストアンサー率36% (97/264)
目的のセルに計算式を入れるっていうのはどうです ActiveSheet.Cells(kakikomi + 3, 2).Formula = "=sum(R" & kakikomi & "C2:R" & kakikomi & "C6)+sum(R" & kakikomi + 2 & "C2:R" & kakikomi + 2 & "C6)" 変数kakikomi=1のとき cell(4,2)に ”=sum(R1C2:R1C6)+sum(R3C2:R3C6)” という式が入ります。 もしどうしても値が入れたいならこのあと ActiveSheet.Cells(kakikomi + 3, 2).=ActiveSheet.Cells(kakikomi + 3, 2). とすれば値になります。
お礼
計算式をいれる方法もあることに気が付きました。 ありがとう御座います。
- kmetu
- ベストアンサー率41% (562/1346)
連続した列として For Each myRange In Range(Cells(kakikomi, 2), Cells(kakikomi, 6)) my_value = my_value + myRange.Value Next For Each myRange In Range(Cells(kakikomi + 2, 2), Cells(kakikomi + 2, 6)) my_value = my_value + myRange.Value Next というのはいかがでしょう
お礼
Sumにごだわりましたが For Each の加算も出来るのですね 全然、思いつきませんでした。 ありがとうございます。
- abe_onesel
- ベストアンサー率52% (20/38)
わかりやすくという事であれば、 ActiveSheet.Cells(kakikomi + 3, 2) = Application.WorksheetFunction _ .Sum(Range(Cells(kakikomi, 2), Cells(kakikomi, 6)), Range(Cells(kakikomi + 2, 2), Cells(kakikomi + 2, 6))) 上記の感じが感覚的にわかりやすいと思います。 ちょっと変更すれば以下のようにも表現できます。 ActiveSheet.Cells(kakikomi + 3, 2) = Application.WorksheetFunction _ .Sum(Range("B" & kakikomi & ":F" & kakikomi), Range("B" & kakikomi + 2 & ":F" & kakikomi + 2))
お礼
たしかに、やりたいことがそのまま 表示され感覚的にわかりやすいです。 ありがとう御座います。
- n-jun
- ベストアンサー率33% (959/2873)
With ActiveSheet .Cells(kakikomi + 3, 2) = _ Application.Sum(.Cells(kakikomi, 2).Resize(1, 5), .Cells(kakikomi + 2, 2).Resize(1, 5)) End With とか?
お礼
セルの選択方法の勉強になりました。 ありがとうございます。
お礼
Offsetの使用方法でも勉強になりました。 他の計算を行う場合の修正箇所も少なく 助かります。 ありがとう御座いました。