|
γさま
大変お返事遅れてすいません。
頂いた式やコメントを参考に取り組み中です。
一度締め切ります。
ひょっとしたらまたご質問させて頂くかもしれませんが。
改めて、具体的な式まで書いて頂きありがとうございました。
▼γ さん:
>・各部門のシートはフォーマット(特に数値が入っているセルの位置)が統一されているか。
> 部門によっては、製品と製品の間に空行が入っているといったことがないか。
>・製品の数は各部門で違うとき、
> 単純に、最後の行までを対象に、製品の合計をとればよいのか、不明。
>などの疑問点があります。
>
>しかし、現時点で示されたものを前提にコメントしておきます。
>
>> 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つの製品に関する数値があるという前提です。
>
>上記コードはとっかかりに過ぎません。
>月に応じて、書込先の列を変えるとか、いろいろ改善点がありえます。
>
>なお、今後、実はこういう前提になっていました、
>という変更事項がありましてもコードを修正する積もりはありません。
>予め、お断りしておきます。
>
>上記は単なるヒントですから、
>それを参考にしてあなたがトライしていただきたいと思います。
>
>なお、今後、予算と実績の比較とか色々な分析をされると思うので、
>現在のフォーマットが適当なものかも不明です。
>ピボットテーブルなどの利用できる形式の書式のほうがよいかもしれませんね。
>
>それでは頑張ってください。
|
|