我对 VBA 很陌生。我有一个日期范围,我需要编写一个代码,将单元格中的日期更改为单元格中使用的月份的最后一天。例如,如果单元格中的日期是28/03/2018我希望将其替换为31/03/2018. 知道我该怎么做吗?
您可以使用用户定义的函数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 次,因此可能更容易理解。
为了让它变得非常短,你可以使用:
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)
借助 Eomonth 公式,您还可以通过一行代码获得所需的结果:
Range("A1") = Excel.Application.WorksheetFunction.EoMonth(Range("A1").Value2, 0)
Run Code Online (Sandbox Code Playgroud)