Excel VBA将日期文本更改为日期格式

Excel VBA将日期文本更改为日期格式,excel,vba,Excel,Vba,我有一个导出的excel,其日期格式为2019年12月24日,如何使用VBA并设置宏,以便当我单击宏时,它变成2019-12-24。我试图在stackoverflow中找到相关的帖子,但没有找到。这两种格式都是通用文本格式,我希望保持这种格式。尝试以下方法: DateText = "24.12.2019" DateArr = Split(DateText, ".") MsgBox DateArr(2) & "-" & DateArr(1) & "-" & Date

我有一个导出的excel,其日期格式为
2019年12月24日
,如何使用VBA并设置宏,以便当我单击宏时,它变成
2019-12-24
。我试图在stackoverflow中找到相关的帖子,但没有找到。这两种格式都是通用文本格式,我希望保持这种格式。

尝试以下方法:

DateText = "24.12.2019"
DateArr = Split(DateText, ".")
MsgBox DateArr(2) & "-" & DateArr(1) & "-" & DateArr(0)
如果希望输出为日期值:

DateValue(DateArr(2) & "-" & DateArr(1) & "-" & DateArr(0))

由于您希望将所有内容保持为文本,请查看以下代码,并尝试将其调整到您的工作表中

Sub Tester()

    Dim rg As Range
    Set rg = Range("A1:A4")

    Dim sngCell As Range
    For Each sngCell In rg
        ' This will set the format of the cell to text
        sngCell.NumberFormat = "@"

        ' This will change the format of the date
        ' Be careful there is a lot of internal casting going on
        sngCell.Value = Format(sngCell.Value, "YYYY-MM-DD")
    Next

End Sub
你可以用这个函数得到文本的结果

Function dtTxt(inpdte As String) As String
    dtTxt = Format(inpdte, "YYYY-MM-DD")
End Function
请尝试以下操作:

Sub Test()

Dim lr As Long
Dim rng As Range

With Sheet1 'Change according to your sheet's codename
    lr = .Cells(.Rows.Count, "A").End(xlUp).Row 'Change "A" to whichever column data is in
    Set rng = .Range("A1:A" & lr) 'Change accordingly again
    rng.TextToColumns Destination:=rng, DataType:=xlFixedWidth, FieldInfo:=Array(0, xlDMYFormat)
    rng.NumberFormat = "YYYY-MM-DD"
End With

End Sub

您的日期总是采用“dd.mm.yyyy”格式,还是采用“dd.m.yyyy”格式?@JvdV在我导出信息时,日期总是采用“dd.mm.yyyy”格式,因此我希望有一个解决方案,使格式为“yyyy-mm-dd”以使我的生活更轻松。而且您肯定希望保留文本格式?我想不必采用文本格式,日期格式也可以。啊,好的,对不起,我没有读上面的评论。奇怪的是,他为什么要把它写成文本。那么我最好换个帖子。“没有选择数据来解析”rng.TextToColumns…行上的错误“@JiaHaoWang,你必须明确哪个
,哪个
,哪个
范围
,正如我在帖子中解释的那样。代码对我有效。是的,JvDV的代码对我也有效。如前所述,您可以将日期作为输出。您能否告诉我“rng.TextToColumns…”行的作用是什么?我有点困惑。如果你使用循环,一定要在内存(数组)中存储值,一次性格式化
rg
。否则,这应该有效=)是的,对,但可能对OP来说太多了,否则是个好主意explanation@JiaHaoWang,您应该通过选择答案来结束您的问题,并对其进行标记(单击您认为合适的答案右侧的复选标记)