Получение продолжительности между «Сегодня» и «за 12 месяцев до»

#excel #vba

#excel #vba

Вопрос:

У меня есть этот код, который я хочу обновить, чтобы получить продолжительность между «Сегодня» и «за 12 месяцев до»

 Dim today As String
    today = Date
    
 If IsDate(today) Then
        
        LastDay = DateSerial(Year(Date), Month(Date), 0)  
        FirstDay = LastDay - Day(LastDay)   1
        
        myyear = Year(FirstDay)                            
        mymonth = Month(FirstDay)
        myfday = Day(FirstDay)
        mylday = Day(LastDay)
        
        Dim firstdate As String
        Dim lastdate As String
        
        firstdate = myyear amp; Chr(47) amp; mymonth amp; Chr(47) amp; myfday       
        lastdate = myyear amp; Chr(47) amp; mymonth amp; Chr(47) amp; mylday
        
    End If
 

может кто-нибудь помочь, как обновить этот код??

Комментарии:

1. WorksheetFunction.EOMonth . Dim Today As Date … не используйте String . Format$ вероятно, также будет полезно. Кроме того, если вы используете a Date , то проверка IsDate излишня.

2. Также используйте DateAdd , чтобы получить дату, скажем, за 12 месяцев до сегодняшней даты. Например DateAdd("m",-12,date) . Это minus для предыдущих дат.

3. Или WorksheetFunction.EDate (это то, что я имел в виду в своем первоначальном комментарии, а EOMonth не ).

Ответ №1:

Продолжительность может варьироваться в зависимости от событий високосного года:

 Option Explicit

Sub duration()
    Dim d1 As Date, d2 As Date, durasion As Long
    
    d1 = DateSerial(Year(Now()), Month(Now()), Day(Now()))
    d2 = DateSerial(Year(d1) - 1, Month(d1), Day(d1))
    durasion = d1 - d2
    
    MsgBox d1 amp; vbCrLf amp; d2 amp; vbCrLf amp; durasion
    
End Sub
 

введите описание изображения здесь

Я предполагаю, что «за двенадцать месяцев до» означает за год до, в том же месяце, что и раньше, в тот же день, что и раньше.

Комментарии:

1. Excel заботится о високосных годах. 2020 год был високосным, следовательно, 366 дней

2. Или просто Debug.Print DateAdd("yyyy",-1,DATE)

Ответ №2:

длительность между «Сегодня» и «за 12 месяцев до»

Это будет:

 Duration = DateDiff("d", DateAdd("yyyy", -1, Date), Date)