VBA 获取本月的最后一天

fxd*_*234 2 vba

我对 VBA 很陌生。我有一个日期范围,我需要编写一个代码,将单元格中的日期更改为单元格中使用的月份的最后一天。例如,如果单元格中的日期是28/03/2018我希望将其替换为31/03/2018. 知道我该怎么做吗?

Vit*_*ata 6

您可以使用用户定义的函数GetLastDayOfMonth()并传递您感兴趣的范围:

Option Explicit

Public Function GetLastDayOfMonth(ByVal myDate As Date) As Date
    GetLastDayOfMonth = DateSerial(Year(myDate), Month(myDate) + 1, 0)
End Function

Public Sub TestMe()

    Range("A1") = DateSerial(2000, 11, 11)
    If Range("A1") = GetLastDayOfMonth(Range("A1")) Then
        Debug.Print "LAST DAY!"
    End If

    Range("A1") = DateSerial(2000, 12, 31)
    If Range("A1") = GetLastDayOfMonth(Range("A1")) Then
        Debug.Print "LAST DAY! " & Range("A1")
        Range("A1") = DateAdd("d", 1, Range("A1"))
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

该函数检查传递的日期的月份和年份,并返回一个新日期,即该特定月份和年份的该月的最后一天。

然后在该TestMe版本中,您可以将给定日期与函数生成的该月的最后一天进行比较。如果日期相同,则该日期是相应月份的最后一天。使用DateAdd()它可以获得最后一天的第二天。

在上面的例子中,我已经明确地编写了 Range("A1") 9 次,因此可能更容易理解。


Rys*_*zyk 6

为了让它变得非常短,你可以使用:

Sub test()

    Dim myDate As Date

    myDate = #3/28/2018#
    Debug.Print DateSerial(Year(myDate), Month(myDate) + 1, 0)

End Sub
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案始终是混淆点为 0 的答案。这个。 (2认同)

Pie*_*e44 6

借助 Eomonth 公式,您还可以通过一行代码获得所需的结果:

Range("A1") = Excel.Application.WorksheetFunction.EoMonth(Range("A1").Value2, 0)
Run Code Online (Sandbox Code Playgroud)