凯西(Kathy)需要一个公式,该公式会将当月内的任何日期更改为上个月的最后一天。她还指出,拥有一个VBA宏可以对选定单元格区域中的日期执行此操作将很有帮助。

实际上,可以使用几种不同的公式化方法来得出所需的日期。这两个是最短和最容易使用的:

=A1-DAY(A1)

=EOMONTH(A1,-1)

第一个起作用是因为当前月份的“第0天”始终被视为上个月的最后一天。因此,如果单元格A1中的日期为9/25/20,则最终从该日期减去25(DAY值),得出日期为9/0/20或8/31/20。

第二个公式起作用,因为包含了EOMONTH函数的第二个参数。此参数用于指示应该计算月末的过去(负数)或将来(正数)数月。

无论哪种情况,您都可能需要格式化包含该公式的单元格作为日期。如果不这样做,您看到的可能是Excel用于计算日期的基础序列号。

如果您想要一个宏,它将实际将选定范围内的日期转换为上个月的最后一天,则可以使用以下技巧。

Sub LastDayPreviousMonth()

Dim rCell As Range

For Each rCell In Selection         If IsDate(rCell) And Not rCell.HasFormula Then             rCell.Value = WorksheetFunction.EoMonth(rCell.Value, -1)

End If     Next rCell End Sub

宏会逐步遍历选定范围内的每个单元格,并检查它是否包含日期而不是公式。 (换句话说,如果单元格中的日期是公式的结果,则该公式不会更改。)

如前所述,然后使用EOMONTH函数来计算所需的日期。

应该提到的是,宏方法还将转换文本日期。例如,如果一个单元格包含日期“ 6/15/20”作为文本,

然后宏会将其更改为5/30/20。将调整后的日期塞回到单元格后,它将显示为日期/时间序列号,而不是文本。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(13304)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。