dポイントプレゼントキャンペーン実施中!

vbaでシステムの効率化をしている
エンジニアです。

添付の図のような表に100件~1000件
の可変するデータが入ります。

右の4つのコミッションを合計して小計のところに自動計算したいのですが
データ量が変動するため(この表の上下のデータ量も変動する)
vbaで何行目から何行目を合計するという指定ができません


Q&Aを見ていくと
offset関数・名前の定義をうまく使ったらいいとあり



  Worksheets("Sheet1").Names.Add Name:="名前A"
  RefersTo:=Range("コミッション1")
Worksheets("Sheet1").Names.Add Name:="名前B"
  RefersTo:=Range("(2)小計")

  ActiveCell.Offset(-3, 2).Range("名前A:名前B").Select
ActiveCell.Offset(15, 2).Range("名前A").Activate
ActiveCell.FormulaR1C1 = "=SUM(R[-18]C:R[-1]C)"
ActiveCell.Offset(-18, 0).Range("名前A:名前B").Select

End If

これで合計できると思うのですが、
どなたか添削していただけないでしょうか?

「VBA 可変行のデータを自動集計する」の質問画像

A 回答 (1件)

変なセル選択してそうですし、Formula固定値じゃ可変行になりませんよね。


定義済みの名前を使えば名前再定義は不要、Offset,Select,Activateも不要に思えます・・・

混乱するようなら、すべきこと整理すると、
 ・合計範囲のアドレスを取得(rowだけでいい)
 ・"=SUM(...)"の式を、アドレスから生成する
 ・小計セルに式を入れる
結果、たぶんこんな感じで↓
 r = Range("なんとか1").row - Range("小計").row
 Range("小計").FormulaR1C1 = "=SUM(R[" & r & "]C:R[-1]C)"

ちなみに、ActiveCell,Offset,Rangeはいずれも、"Range"つまりセル範囲を返します。Range.Range()は、元セルを基準とした相対位置になり、混乱を招くので使用は控えた方が。
以下、すべて同じ。
- Range("B3")
- Range("A1").Offset(2, 1)
- Range("A2").Range("B2")
- Range("A1").Offset(1, 1).Range("A2")
範囲調整は.Resize()
相対位置指定は、.Cells()のが分かりやすいです。
http://msdn.microsoft.com/ja-jp/library/microsof …


ただ、せめて動くか試した上で質問してほしいです。
試せば分かることは多いはず。

エンジニア名乗るなら尚・・・
情報がなければ試行錯誤するのが本職。添削だなんて学生じゃあるまいし、入門書読んだかも怪しいレベルで無料コーナーに頼ってるよーじゃダメですよ。
    • good
    • 0
この回答へのお礼

本当に助かりました!!
うまく伝わらなかったのですが、試行錯誤を重ねてたのです。

質問の仕方、説明が足りなくて誤解を招いてしまいました。
異国でIT担当者1人という状況で、強い焦りを出してしまいました。

本当にありがとうございました。
今度困った事があったら助けて下さい。

お礼日時:2011/12/14 22:46

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