2016-09-08 2 views
-2

나는 열 F에서 날짜 E3 : E의 날짜 범위를 가지고 있습니다. 오늘 날짜의 차이가 싶습니다.-E3 = F3, F4 = 오늘 -E4에서 그렇습니다. E.이의 마지막 값이 코드까지에 내가 지금 가지고 :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 

+1

어떻게 작동하지 않습니까? 어디서 오류가 있습니까? –

+1

왜 VBA입니까? 수식을 작성하고 열 F 아래로 끌어 올 수 있습니다. – Kyle

+0

@ Valsac VBA 옵션을 사용하려는 경우 아래 코드를 시도하십시오. –

답변

0

당신은 VBA 솔루션을 사용하려면 도움말 pleaseee, 아래 코드는 작동합니다. DateDiff 기능을 사용하는 것을 선호합니다. 아래 코드에서 기한이 "d"(일) 이내에 반환됩니다.

또한 안전한면에 있고 (더 깨끗한 코드가 있어야 함) 항상 시트 객체를 정의합니다 (나중에 오류가 발생할 가능성이 줄어 듭니다). 당신이 F을 날짜가 E칼럼에 알고 열에서 결과 때문에

, 난 이미 코드 (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