前月の開始日と終了日を取得するコードをVB=を作成しようとしています。
Month(DateValue(Now))
3を返します。そこから1を取り去って2を意味する2を与えることができます。これは問題ありませんが、1月にImを実行し、これを繰り返すとゼロになります。コードは失敗します。誰でも前月の開始日と終了日を取得する方法を知っていますか?
ありがとう
前月の最初の日は常に1です。前月の最後の日を取得するには、DateSerialで0を使用します。
''Today is 20/03/2013 in dd/mm/yyyy
DateSerial(Year(Date),Month(Date),0) = 28/02/2013
DateSerial(Year(Date),1,0) = 31/12/2012
次のように、上記から最初の日を取得できます。
LastDay = DateSerial(Year(Date),Month(Date),0)
FirstDay = LastDay-Day(LastDay)+1
私は最初と最後の日に似た式を持っています
月の最初の日
FirstDay = DateSerial(Year(Date),Month(Date),1)
翌月のゼロ日はその月の最後の日です
LastDay = DateSerial(Year(Date),Month(Date)+ 1,0)
firstDay = DateSerial(Year(DateAdd("m", -1, Now)), Month(DateAdd("m", -1, Now)), 1)
lastDay = DateAdd("d", -1, DateSerial(Year(Now), Month(Now), 1))
これは別の方法ですが、Remouのバージョンはよりきれいに見えると思います。
これはメインサブで確実に機能します。
Dim defDate1 As Date, defDate2 As Date
'** Set default date range to previous month
defDate1 = CDate(Month(Now) & "/1/" & Year(Now))
defDate1 = DateAdd("m", -1, defDate1)
defDate2 = DateAdd("d", -1, DateAdd("m", 1, defDate1))
これを試して、月を数値形式で取得します。
_Month(DateAdd("m", -3, Now))
_
12月の_12
_が表示されます。
したがって、あなたの場合は、Month(DateAdd("m", -1, Now))
を使用して、1か月だけを練習します。
Public Shared Function GetFOMPrev(ByVal tdate As Date) As Date
Return tdate.AddDays(-(tdate.Day - 1))
End Function
Public Shared Function GetEOMPrev(ByVal tdate As Date) As Date
Return tdate.AddDays(-tdate.Day)
End Function
使用法:
'Get End of Month of Previous Month - Pass today's date
EOM = GetEOMPrev(Date.Today)
'Get First of Month of Previous Month - Pass date just calculated
FOM = GetFOMPrev(EOM)
@Fionnualaが言ったことに何かを追加するために、以下の関数を使用できます。これらはうるう年でも機能します。
'If you pass #2016/20/01# you get #2016/31/01#
Public Function GetLastDate(tempDate As Date) As Date
GetLastDate = DateSerial(Year(tempDate), Month(tempDate) + 1, 0)
End Function
'If you pass #2016/20/01# you get 31
Public Function GetLastDay(tempDate As Date) As Integer
GetLastDay = Day(DateSerial(Year(tempDate), Month(tempDate) + 1, 0))
End Function
これを試して
First_Day_Of_Previous_Month = New Date(Today.Year, Today.Month, 1).AddMonths(-1)
Last_Day_Of_Previous_Month = New Date(Today.Year, Today.Month, 1).AddDays(-1)