2017-03-14 21 views
0

次のコードは、c = 2の場合にのみ機能しますが、他の値でも動作させたいと考えています。以下は、私がそれを実行したいExcelテーブルです。ExcelのネストされたForループVBA

Date PickupCost StorageCost DeliveryCost 
1/1/2017 140  35   0 
1/8/2017 80  20   0 
1/10/2017 0   0   149 
1/30/2017 35   8   0 

私が行方不明、各日付のデータを記入したいが、3列目(StorageCost)でのみ値が前日のStorageCost値などの他の欠落日付値で同じにする必要があります。

Dim j, p, w, c As Long 
Dim date1, date2 As Date 
j = Cells(Rows.Count, 1).End(xlUp).Row 
w = 2 
For c = w To j 
    date1 = Range("A" & w).Value 
    date2 = Range("A" & (w + 1)).Value 
    p = DateDiff("d", date1, date2) 
    For w = 2 To p 
     Range("A" & (c + 1)).EntireRow.Insert 
     ActiveSheet.Cells(c + 1, 1).Value = (ActiveSheet.Cells(c, 1).Value) + 1 
     ActiveSheet.Cells(c + 1, 2).Value = 0 
     ActiveSheet.Cells(c + 1, 3).Value = ActiveSheet.Cells(c, 3).Value 
     ActiveSheet.Cells(c + 1, 4).Value = 0 
     c = c + 1 
    Next w 
    w = w + 1 
    ActiveSheet.Range("A1").Select 
    j = Cells(Rows.Count, 1).End(xlUp).Row 
Next c 
+0

何cがすることになっており、どこでそれを初期化していますか? –

+0

cは、行の日付と前の行の日付の各組み合わせの間のギャップを計算する必要があるため、ループの実行回数を基にしたカウンタです。 wの値に基づいて初期化されます。 –

+0

あなたが良くしようとしていることを説明してください - 分かりません。 「データが欠落していますか」という値は0ですか?あなたが望む結果の例を投稿できますか? – user1274820

答えて

1

あなたの主な問題は、あなたがあなたのFor c = w To jループを定義したら、それはあなたがループのために定義されたときにjが持っていた値に達するまで、それだけで実行されるということです。 あなたが行数を変更するランタイムに適応ループの終点をしたい場合、あなたはDo Untilループを使用する必要があり、このような:

Dim p As Long 
Dim c, w As Integer 
Dim date1, date2 As Date 

c = 2 
Do Until c = Cells(Rows.Count, 1).End(xlUp).Row 
    date1 = Range("A" & c).Value 
    date2 = Range("A" & (c + 1)).Value 
    p = DateDiff("d", date1, date2) 
    For w = c To c + p - 2 
     Range("A" & (w + 1)).EntireRow.Insert 
     ActiveSheet.Cells(w + 1, 1).Value = (ActiveSheet.Cells(c, 1).Value) + 1 
     ActiveSheet.Cells(w + 1, 2).Value = 0 
     ActiveSheet.Cells(w + 1, 3).Value = ActiveSheet.Cells(c, 3).Value 
     ActiveSheet.Cells(w + 1, 4).Value = 0 
     c = c + 1 
    Next w 
    c = c + 1 
Loop 
+0

ありがとうございました。それは私の要求に従って正確に働いた。 –

関連する問題