2016-09-08 21 views
-2

私は列Eの列Eの日付の範囲を持っています。今日の日付の差をE3 = F3、F4 =今日のE4のようにしたいMACRO、日付と今日の差

'Calculate Overdue 
For i = 1 To lastrow 
    If i = 1 Then 
     Workbooks(Main).Sheets(1).Cells(i + 1, lastcolumn + 1).Value = "Overdue [days]" 
    Else 
     Workbooks(Main).Sheets(1).Cells(i + 1, lastcolumn + 1).Value = _ 
     Now - Workbooks(Main).Sheets(1).Cells(i + 1, lastcolumn - 1).Value 
    End If 
Next i 

ヘルプpleaseee

+1

どうしますか?どこにエラーがありますか? –

+1

なぜVBAですか?あなたは数式を書いて、列Fの下にドラッグすることができます。 – Kyle

+0

@ Valsac VBAオプションを使いたい場合は、下記のコードを試してみてください –

答えて

0

あなたはVBAソリューションを使用したい場合は、以下のコードは動作します:E.の最後の値までにこれは私が今持っているコードです。 DateDiff機能を使用することをお勧めします。下のコードでは、延滞分を "d"(日)で返します。

また、私は常にシートオブジェクトを定義します(後でエラーが発生する可能性も低くなります)。

あなたの日付が列E、および列Fにおける結果である知っているので、私はすでにコード中(lastcolumnと交換することができるが、なぜわからない)ことを実施しました。

Sub Calc_Overdue() 
'Calculate Overdue 

Dim Sht    As Worksheet 
Dim DaysOverdue  As Long 
Dim LastRow   As Long 
Dim i    As Long 

Set Sht = Workbooks(Main).Sheets(1) 

i = 1 
With Sht 
    ' find last row in Column E (where the dates are kept) 
    LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row 

    ' there is no need to loop through the IF just to copy the header row 
    .Cells(1, "F").Value = "Overdue [days]" 

    ' start loop from 2nd row 
    For i = 2 To LastRow 
     DaysOverdue = DateDiff("d", Now, .Cells(i, "E").Value) 
     .Cells(i, "F").Value = DaysOverdue 
    Next i 

End With 

End Sub