如何使用vba将yyyymm数字字符串转换为结束月份日期?

时间:2017-07-13 07:07:51

标签: excel vba excel-vba

目前,在我的Excel中,有一个年份和月份的字符串写为yyyymm。 例如:201706

现在我想将其转换为另一个工作表中的月末日期。例如:20170630

现在的问题是,如何告诉Excel根据字符串中的月份值自动创建日期?

我打算使用if语句根据字符串后面的结束值声明每个月。 (即:如果2017 06 ,日期= 20170630)

但后来我认为在二月的闰年不会工作。除此之外还有其他方法吗?

4 个答案:

答案 0 :(得分:3)

试试这个

dtmDate = 201706 (or put there value from cell)

dhLastDayInMonth = DateSerial(Left(dtmDate, 4), Right(dtmDate, 2) + 1, 0)

答案 1 :(得分:2)

解决问题的最简单方法是不使用vb​​a makro。使用DateLeftRight以及EOMonth函数,您可以将字符串转换为如下例所示的日期。

使用它你甚至不需要vba:

=EOMONTH(DATE(LEFT(A1;4);RIGHT(A1;2);1);0) (例如,如果日期字符串在A1中)

查看this页面以获取有关此功能的更多详细信息

答案 2 :(得分:1)

我经常使用下一个月的第一天(总是第一天)并减去日期的1来进行一些解决方法。不幸的是,这只适用于Date-Values:

试试这个:

Sub LastDayOfMonth()

    strInput = "201711"
    y = Left(strInput, 4)
    m = Right(strInput, 2)

    dat = DateSerial(y, m + 1, 1) - 1

End Sub

答案 3 :(得分:1)

Dim dLast As Date
 dLast = DateAdd("d", -1, CDate("1/" & Format(Date, "mm/yyyy")))

如果您将日期放在单元格A1中,则通过messageBox:

MsgBox Format([eomonth(A1,6)], "dd/mm/yyyy")