|
・各部門のシートはフォーマット(特に数値が入っているセルの位置)が統一されているか。
部門によっては、製品と製品の間に空行が入っているといったことがないか。
・製品の数は各部門で違うとき、
単純に、最後の行までを対象に、製品の合計をとればよいのか、不明。
などの疑問点があります。
しかし、現時点で示されたものを前提にコメントしておきます。
> Dim 変数 As Range
> SET 変数 = RANGE を使うのかなと思いましたが、
> 別ファイルからの取得なので、
> SET 変数 = RANGE('[作業内容.XLS]部門A!B2)
というところですが、
Workbooks("aaa").Worksheets("BBB").Range("...") という形式のほうが
よいでしょう。
たとえば、こんな書き方ができるかもしれません。参考例です。
Sub test()
Dim wbS As Workbook
Dim wbD As Workbook
Dim wsS As Worksheet
Dim wsD As Worksheet
Dim sh As Variant
Dim k As Long
Set wbD = Workbooks("単月業績.xls") 'D: Destination(転記先)
Set wsD = wbD.Worksheets("6月")
Set wbS = Workbooks("作業内容.xls") 'S: Source(転記元)
For Each sh In Array("部門A", "部門B")
Set wsS = wbS.Worksheets(sh)
wsD.Cells(2 + k, "D").Value = getSum(wsS.Cells(2, 4))
wsD.Cells(2 + k, "E").Value = getSum(wsS.Cells(3, 4))
wsD.Cells(3 + k, "D").Value = getSum(wsS.Cells(4, 4))
wsD.Cells(3 + k, "E").Value = getSum(wsS.Cells(5, 4))
wsD.Cells(4 + k, "D").Value = getSum(wsS.Cells(6, 4))
wsD.Cells(4 + k, "E").Value = getSum(wsS.Cells(7, 4))
k = k + 4
Next
Ens Sub
合計する部分は、例えば関数にしておいて
Function getSum(r As Range) As Long
getSum = r.Value + r.Offset(6).Value + r.Offset(12).Value
End Function
などとします。最大3つの製品に関する数値があるという前提です。
上記コードはとっかかりに過ぎません。
月に応じて、書込先の列を変えるとか、いろいろ改善点がありえます。
なお、今後、実はこういう前提になっていました、
という変更事項がありましてもコードを修正する積もりはありません。
予め、お断りしておきます。
上記は単なるヒントですから、
それを参考にしてあなたがトライしていただきたいと思います。
なお、今後、予算と実績の比較とか色々な分析をされると思うので、
現在のフォーマットが適当なものかも不明です。
ピボットテーブルなどの利用できる形式の書式のほうがよいかもしれませんね。
それでは頑張ってください。
|
|