#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$
вероятно, также будет полезно. Кроме того, если вы используете aDate
, то проверка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)