2016-05-23 7 views
1

私は1つのスプレッドシートから複数の範囲の合計を取得し、別のものに値を貼り付けるループを作ろうとしています。たとえばrange( "E10:E54")を使用すると、ループは機能しますが、同じ合計値がすべてのセルに貼り付けられます。 Range(Cells())を使用して次の範囲に移動し、合計を取得しようとしていますが、試してみるとバグがあります。私のコードは以下の通りです。私は何が欠けていますか?私のVBAループでセルを使用している問題がある

これは私の現在のコードです。私はRange( "e10:E54")の代わりに Range(Cells(10,5)、Cells(54,5)))を置き換えただけです。

Dim e As Long 
e = 1 

Do While e < 39 

    Cells(e, 5).Value = Application.Sum(Workbooks("Current Fcst.xlsm").Sheets("Sales").Range(Cells(10, 5), Cells(54, 5))) 
    e = e + 3 

Loop 


End Sub 

答えて

1

範囲内のCells()がアクティブシートを見ていると範囲が異なるシートを見ているので、あなたはバグを取得します。これは、Withブロックを使用するのに適しています。

Dim e As Long 
Dim ws as WorkSheet 

Set ws = ActiveSheet 

e = 1 

Do While e < 39 
    With Workbooks("Current Fcst.xlsm").Sheets("Sales") 
     ws.Cells(e, 5).Value = Application.Sum(.Range(.Cells(10, 5), .Cells(54, 5))) 
    End With 
    e = e + 3 

Loop 

アクティブシートを直接含む親シートを設定することにより、各レンジオブジェクトがどのシートに属するかが分かります。

3つのオブジェクトの前にある.は、それがブロックブロックの親に属することを示します。

+0

ありがとうございました!私はVBAのまだかなり新しいです。 –

+0

@sorenthomsenこれがうまくいく場合は、答えのチェックマークをクリックして正しいとマークしてください。それはあなただけができることです。 –

関連する問題