如何使用vba将yyyymm数字string转换为结束月份date?

目前,在我的Excel中,有一个年份和月份的string写成yyyymm。 例如:201706

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

现在的问题是,如何让Excel根据string中的月份值自动创build一天?

我打算使用if语句根据string后面的结尾值来申报每个月。 (即:如果2017年06月,date= 20170630)

但后来我觉得这个在二月份的闰年是行不通的。 除此之外还有另外一种方法吗?

尝试这个

dtmDate = 201706 (or put there value from cell) dhLastDayInMonth = DateSerial(Left(dtmDate, 4), Right(dtmDate, 2) + 1, 0) 

解决你的问题最简单的方法是甚至不使用vb​​a makro。 使用DateLeftRight以及EOMonth函数,可以将string转换为如下例所示的date。

使用这个你甚至不需要vba:

=EOMONTH(DATE(LEFT(A1;4);RIGHT(A1;2);1);0) (例如datestring在A1中)

看看这个页面来获得这个function的更多细节

我经常使用一个小的解决方法,在下个月的第一天(总是第一天)和减去date1。 不幸的是,只有date值的作品:

试试这个:

 Sub LastDayOfMonth() strInput = "201711" y = Left(strInput, 4) m = Right(strInput, 2) dat = DateSerial(y, m + 1, 1) - 1 End Sub 
 Dim dLast As Date dLast = DateAdd("d", -1, CDate("1/" & Format(Date, "mm/yyyy"))) 

或者通过一个messageBox如果您将date放在单元格A1中:

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