【问题标题】:how to convert yyyymm number string into end month date using vba?如何使用 vba 将 yyyymm 数字字符串转换为月底日期?
【发布时间】:2017-07-13 07:07:51
【问题描述】:

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

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

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

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

但后来我认为这不适用于二月的闰年。除此之外还有其他方法可以使用吗?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    试试这个

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

    【讨论】:

    • 谢谢。尽管出于好奇,代码的“+ 1, 0”部分是做什么的?
    • Right(dtmDate, 2) 返回月份,+1 将其加一,因此指的是 7 月。 0 是天数 - 天数 0 实际上是上个月的最后一天,因此是 6 月 30 日。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 用法示例:=EOMONTH(LEFT("201711",4)&"-"&RIGHT("201711",2)&"-01",0)
    【解决方案3】:

    我经常使用一些解决方法,将下个月的第一天(始终是第一天)减去该日期的 1。不幸的是,这只适用于日期值:

    试试这个:

    Sub LastDayOfMonth()
    
        strInput = "201711"
        y = Left(strInput, 4)
        m = Right(strInput, 2)
    
        dat = DateSerial(y, m + 1, 1) - 1
    
    End Sub
    

    【讨论】:

      【解决方案4】:
      Dim dLast As Date
       dLast = DateAdd("d", -1, CDate("1/" & Format(Date, "mm/yyyy")))
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-20
        • 2022-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多