VBA获得了本月的最后一天

时间:2018-06-01 11:36:54

标签: vba

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

7 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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的第二天。

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

为了让它真的很短,你可以使用:

$query     = "INSERT INTO scan (user_id, osha, firstname, lastname, company, trade, email, picture) VALUES (" .
        "'" . $user_id . "', " .
        "'" . mysqli_real_escape_string($dbc, $osha     ) . "', " .
        "'" . mysqli_real_escape_string($dbc, $firstname) . "', " .
        "'" . mysqli_real_escape_string($dbc, $lastname ) . "', " .
        "'" . mysqli_real_escape_string($dbc, $company  ) . "', " .
        "'" . mysqli_real_escape_string($dbc, $trade    ) . "')";
      mysqli_query($dbc, $query);

答案 4 :(得分:0)

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天
  4. 步骤 2 3 可以避免所有复杂的日期计算。

    对于Excel方式,请参阅other answer

答案 5 :(得分:0)

此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

结束功能

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

答案 6 :(得分:0)

在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