
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
これで合計できると思うのですが、
どなたか添削していただけないでしょうか?

No.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 …
ただ、せめて動くか試した上で質問してほしいです。
試せば分かることは多いはず。
エンジニア名乗るなら尚・・・
情報がなければ試行錯誤するのが本職。添削だなんて学生じゃあるまいし、入門書読んだかも怪しいレベルで無料コーナーに頼ってるよーじゃダメですよ。
本当に助かりました!!
うまく伝わらなかったのですが、試行錯誤を重ねてたのです。
質問の仕方、説明が足りなくて誤解を招いてしまいました。
異国でIT担当者1人という状況で、強い焦りを出してしまいました。
本当にありがとうございました。
今度困った事があったら助けて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複雑なシフト表から1日ごとの...
-
名前を呼ばずに「すみません」...
-
息子が名前が原因でいじめられ...
-
えっち中・名前
-
彼氏が良く、「◯◯(私の名前)」...
-
LINEの名前をちょこちょこ変え...
-
ESTA
-
男で一人称が自分の名前って珍...
-
性行為中に
-
「○○Jr.」という名前の人はもう...
-
Hの最中に違う女の名前を言わ...
-
エクセルで外部データの取り込...
-
みなさん、恋人のLINEの名前は...
-
急に名前を呼ばれなくなった 職...
-
彼氏が「君」っていいます
-
自分の名前について。 私の名前...
-
リトルツインスターズ
-
電話をかけてきて、社名だけで...
-
私が「なんて呼んだらいい?」と...
-
ふりがなの書き方についてです。
おすすめ情報