• ベストアンサー

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)) 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

77TAKETAKA
質問者

お礼

Offsetの使用方法でも勉強になりました。 他の計算を行う場合の修正箇所も少なく 助かります。 ありがとう御座いました。

その他の回答 (4)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.4

目的のセルに計算式を入れるっていうのはどうです 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). とすれば値になります。

77TAKETAKA
質問者

お礼

計算式をいれる方法もあることに気が付きました。 ありがとう御座います。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

連続した列として 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 というのはいかがでしょう

77TAKETAKA
質問者

お礼

Sumにごだわりましたが For Each の加算も出来るのですね 全然、思いつきませんでした。 ありがとうございます。

回答No.2

わかりやすくという事であれば、 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))

77TAKETAKA
質問者

お礼

たしかに、やりたいことがそのまま 表示され感覚的にわかりやすいです。 ありがとう御座います。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

With ActiveSheet      .Cells(kakikomi + 3, 2) = _      Application.Sum(.Cells(kakikomi, 2).Resize(1, 5), .Cells(kakikomi + 2, 2).Resize(1, 5)) End With とか?

77TAKETAKA
質問者

お礼

セルの選択方法の勉強になりました。 ありがとうございます。

関連するQ&A