【问题标题】:VBA get the last day of the monthVBA获取本月的最后一天
【发布时间】:2021-01-31 21:24:09
【问题描述】:

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

【问题讨论】:

  • 我会去下个月然后一天回来...dateserial(year("Value from the cell"),month("Value from the cell")+1,1)-1你可能根本不需要VBA,只需要Excel中的公式
  • =DATE(YEAR(A2),MONTH(A2)+1,1)-1=EOMONTH(A2,0)

标签: vba


【解决方案1】:

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

Range("A1") = Excel.Application.WorksheetFunction.EoMonth(Range("A1").Value2, 0)

【讨论】:

  • Application.WorksheetFunction 是一个不错的技巧。不知道那个。
【解决方案2】:

您可以使用用户定义的函数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

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

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

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

【讨论】:

    【解决方案3】:

    要真正简短,您可以使用:

    Sub test()
    
        Dim myDate As Date
    
        myDate = #3/28/2018#
        Debug.Print DateSerial(Year(myDate), Month(myDate) + 1, 0)
    
    End Sub
    

    【讨论】:

    • 最佳答案始终是混淆点为 0 的答案。这个。
    【解决方案4】:

    首先,如果您只想在 Excel 中使用该月的最后一天,请使用 =EOMONTH 函数,或查看此 SO 帖子以获取 vba 代码: VBA Run Macro Last Day of the Month

    滚动您自己的日期时间代码是个坏主意。不要这样做。

    【讨论】:

      【解决方案5】:

      此 VBA 函数将计算该月的最后一天:

          Public Function LastDay(ByVal d As Date)
          Dim returnDate As Date
          'First day of current month
          returnDate = DateSerial(Year(d), Month(d), 1)
          'Forward a month
          returnDate = DateAdd("m", 1, returnDate)
          'back one day
          returnDate = DateAdd("d", -1, returnDate)
          LastDay = returnDate
      End Function
      

      通过跳到月初,加上一个月然后减去一天(所以 2 月 1 日->3 月 1 日->2 月 28 日)

      【讨论】:

        【解决方案6】:

        像这样在 VBA 中:

        Sub LastDayOfMonth()
            Dim dates As Range, dt As Range
        
            Set dates = Range("A1") //Update as required
        
            For Each dt In dates
                dt = Application.WorksheetFunction.EoMonth(dt, 0) //e.g. 01/06/2018 ~~~> 30/06/2018
            Next
        End Sub
        

        【讨论】:

          【解决方案7】:

          VBA方式:

          Function LastDayOfMonth(ByVal d As Date)
            LastDayOfMonth = DateSerial(Year(d), Month(d), 1)
            LastDayOfMonth = DateAdd("m", 1, LastDayOfMonth)
            LastDayOfMonth = DateAdd("d", -1, LastDayOfMonth)
          End Function
          
          1. 构造新日期:
            • 年份:从旧日期开始
            • 月份:从旧日期开始
            • :1
          2. 1 个月添加到新日期。
          3. 从新日期减去 1 天

          步骤 23 让您免于复杂的日期计算。

          Excel方式请参考other answer

          【讨论】:

            猜你喜欢
            • 2012-02-13
            • 1970-01-01
            • 2012-12-16
            • 1970-01-01
            • 1970-01-01
            • 2014-03-22
            • 2022-11-25
            • 1970-01-01
            相关资源
            最近更新 更多