Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 更改日期格式,使DAYS()公式生效_Excel_Vba_Date_Format - Fatal编程技术网

Excel 更改日期格式,使DAYS()公式生效

Excel 更改日期格式,使DAYS()公式生效,excel,vba,date,format,Excel,Vba,Date,Format,我正在尝试使用VBA转换表列中的日期格式,以便在公式中使用它 该列包含格式为“常规”而非“日期”的日期,如下所示:2019年4月13日。因此,它需要是dd/mm/yyyy,并被识别为日期 我在网上查了一下,很难找到有用的东西。 我试过: .numberformat = "dd/mm/yyyy" 但它不起作用 这就是我正在尝试的代码 With wsDormant.ListObjects("Table_Dormant_Stock").ListColumns.Add .Dat

我正在尝试使用VBA转换表列中的日期格式,以便在公式中使用它

该列包含格式为“常规”而非“日期”的日期,如下所示:2019年4月13日。因此,它需要是dd/mm/yyyy,并被识别为日期

我在网上查了一下,很难找到有用的东西。 我试过:

.numberformat = "dd/mm/yyyy"
但它不起作用

这就是我正在尝试的代码

    With wsDormant.ListObjects("Table_Dormant_Stock").ListColumns.Add
        .DataBodyRange.Formula = "=DATE(RIGHT([@[Days Last Sold]],4), MID([@[Days Last Sold]],3,2), LEFT([@[Days Last Sold]],2))"
    End With

'Change date to amount of days
    With wsDormant.ListObjects("Table_Dormant_Stock").ListColumns.Add
        .DataBodyRange.Formula = "=DAYS($C$8,[Days Last Sold])"
         wsDormant.ListObjects("Table_Dormant_Stock").ListColumns("Days Last Sold").DataBodyRange.Value = .DataBodyRange.Value
        .Delete
    End With
当我尝试这个公式时,我得到了#值。
它需要将单元格格式转换为日期。使用日期的公式似乎不喜欢dd/mm/yyyy中的日期格式。但如果您对yyyy/mm/dd感到满意,则应首先将“伪日期”转换为“真实”日期。选择单元格并运行:

Sub FixDate()
    Dim d As Date, r As Range, v As String

    For Each r In Selection
        v = r.Text
        r.Clear
        arr = Split(v, "/")
        d = DateSerial(arr(2), arr(1), arr(0))
        r.Value = d
        r.NumberFormat = "dd/mm/yyyy"
    Next r
End Sub

您应该首先将“伪日期”转换为“真实”日期。选择单元格并运行:

Sub FixDate()
    Dim d As Date, r As Range, v As String

    For Each r In Selection
        v = r.Text
        r.Clear
        arr = Split(v, "/")
        d = DateSerial(arr(2), arr(1), arr(0))
        r.Value = d
        r.NumberFormat = "dd/mm/yyyy"
    Next r
End Sub

GS,这不是消极的,只是试图理解;你能不能只使用
CDate
更改单元格值,然后更改“.NumberFormat=“dd/mm/yyyy”,或者我遗漏了什么?@GMalc我不知道…………如果
CDate()
看到2010年4月1日,它认为1月4日还是4月1日是GS,这不是否定的,只是试图理解一下;你能不能只使用
CDate
更改单元格值,然后更改“.NumberFormat=“dd/mm/yyyy”,或者我遗漏了什么?@GMalc我不知道…………如果
CDate()
看到2010年4月1日,它认为是1月4日还是4月1日??