在 Excel VBA 中连接日期后无法更改格式

Cannot change the format after concatenating dates in Excel VBA

我将日期格式化为文本。我想将这些日期的格式从 “dd.mm.yyyy hh:mm”到“yyyy.mm.dd”。 (例如“04.05.2020 10:33”到“2020.05.04”)我使用以下代码(原始日期在“K”列中):

    Dim cell As Range
For Each cell In Range(Range("K2"), Range("K2").End(xlDown))
    cell.Offset(0, 7).Value = Mid(cell.Value, 7, 4) & "." & Mid(cell.Value, 4, 3) & Left(cell.Value, 2)
Next

新创建的日期无法格式化,所以当我尝试对它们使用 vlookup 函数时,该函数失败,说它无法在查找中找到值 table。 (查找中的日期没问题 table)

我需要手动输入每个单元格并按回车键,然后 excel 才会开始识别格式。 我还发现,如果我像这样使用 excel 的手动“替换”功能:https://i.stack.imgur.com/U3k5e.png,并将点替换为点,excel 将再次开始识别格式,但是当我使用以下代码时它不会识别任何格式:

Range(Range("R2"), Range("R2").End(xlDown)).Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2

有人可以帮忙吗?如何转换 vba 中这些串联值的格式以便 vlookup 能够识别它们?

谢谢!

试试这个:

cell.Offset(0, 7).Value = Format(Mid(cell.Value, 7, 4) & " " & Mid(cell.Value, 4, 3) & " " & Left(cell.Value, 2), "yyyy.mm.dd")

末尾的 yyyy.mm.dd 告诉它您希望它如何格式化。您还需要在 3 个函数之间使用 space 或斜线 (/),因为它无法将句点识别为分隔符。

例如格式化月份。以 1 月为例:

m = 1

mm = 01

mmm = 一月

mmmm = 一月

编辑:

那时我能真正做到的唯一方法是:

Dim cell as range

For Each Cell in Range(Range("K2"), Range("K2").End(xlDown))
    Cell.Value = Format(Replace(Cell.Value,".","/"), "yyyy.mm.dd")
Next

将日期和时间作为字符串转换为日期

Option Explicit

Sub createDate()

    Dim Data As Variant
    Dim currString As String
    Dim currDate As Date
    Dim i As Long
    With Range(Range("K2"), Range("K2").End(xlDown))
        Data = .Value
        For i = 1 To UBound(Data, 1)
            currString = Data(i, 1)
            currDate = DateSerial(CLng(Mid(currString, 7, 4)), _
                CLng(Mid(currString, 4, 2)), CLng(Left(currString, 2)))
            Data(i, 1) = currDate
        Next i
        With .Offset(, 7)
            .Value = Data
            .NumberFormat = "yyyy.mm.dd"
            '.Columns.AutoFit
        End With
    End With

End Sub

我最终使用了以下代码:

   For Each cell In Range(Range("K2"), Range("K2").End(xlDown))
    cell.Offset(0, 7).Value = Mid(cell.Value, 7, 4) & "/" & Mid(cell.Value, 4, 2) & "/" & Left(cell.Value, 2)
Next

原来我只需要使用斜杠来分隔连接的部分,这让我可以自由更改新创建日期的格式。

特别感谢Simon,他的回答帮了大忙!