【问题标题】:Convert data to a datavalue code in excel vba在excel vba中将数据转换为数据值代码
【发布时间】:2019-07-29 09:00:56
【问题描述】:

我正在尝试将两列(yearmonth)转换为日期值代码,并在另一张表中将 begin_dateend_date 转换为日期值作为代码。 例如将year = 2017 和month = 4 转换为4/2017,然后转换为42736(这是代表该数据的日期值代码)。

在第一种情况下,由于有两个单独的列,yearmonth,我尝试先将它们转换为日期格式 MMYYYY(因为 datevalue 不会将其转换为代码,否则在 excel表),为此我使用了data = .Cells(iRowNo, 3) & "/" & .Cells(iRowNo, 2)(我进行了测试,它返回了类似于4/2017的预期结果),但后来我尝试使用datav = DateValue(data)将其转换为日期值代码,但结果为完整日期( 2017 年 1 月 4 日)。

在第二种情况下,我尝试将两个日期(begin_dateend_date)直接转换为具有类似代码的日期值代码,但它返回了相同的结果(完整日期 dd/mm/yyyy)。

似乎 datevalue 在 vba 中的工作方式与在 excel 公式中的工作方式不同,至少在我的情况下。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    日期总是是一个完整的日期。所以4/2017 不是日期。它是一个月的第一天 2017-04-01 或最后一天 2017-04-30

    这是由于 Excel 如何定义日期。日期是自 1900-01-01 以来的天数,所以今天是天数 43675,这意味着 2019-07-29。使用此定义无法找到自 1900-01-01 以来代表 2017-04 的天数。

    因为2017-03-3142825,如果添加+1,那么428262017-04-01。所以你需要自己定义2017-04April的第一个或最后一天。

    例如,如果您定义一个到期日期2017-04 可能意味着2017-04-30

    要将日期转换为其DateValue,您首先需要创建一个真实日期:

    Dim MyDate As Date
    MyDate = DateSerial(2017, 4, 1)
    
    Dim MyValue As Long
    MyValue = DateValue(MyDate)
    
    'returns 42826
    

    【讨论】:

    • 是的,我同意第一种情况,但在第二种情况下,我已经有一个定义日期(例如begin_date = 2017-03-31)并且a = DateValue(date1) 代码没有返回任何像2017-03-31这样的代码编辑:我在你编辑答案之前回复了
    • @JPAbreu 您需要为DateValue 创建一个真实日期,例如使用DateSerial 查看我编辑的答案。切勿使用Strings(文本)作为日期。如果它们实际上是文本,则无法使用日期进行计算。这个data = .Cells(iRowNo, 3) & "/" & .Cells(iRowNo, 2) 只创建文本而不创建日期。
    • 好的,再问一个问题:在您刚刚在上述答案Dim MyDate As Date MyDate = DateSerial(2017, 4, 1) 中编写的代码中,您在那里定义日期,但如果我想从 excel 表中的单元格中获取日期,怎么可能我这样做?我在 vba 方面没有太多经验,但很抱歉。
    • 我尝试使用MyDate = DateSerial(date1) date1 (date1 = .Cells(iRowNo, 2)) 表示begin_date 列的单元格中的日期,但它不起作用。
    • 没关系,我很笨,我将yearmonthday 分别定义为ano_init = Year(date1), mes_init = Month(date1) ,dia_init = Day(date1),然后使用您的代码MyDate = DateSerial(ano_init, mes_init, dia_init),它工作正常。
    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 2018-06-05
    • 1970-01-01
    • 2021-11-01
    • 2013-05-27
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多