在 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 函数时,该函数失败,说它在查找表中找不到值。 (日期在查找表中是可以的)

我需要手动输入每个单元格并按回车键,然后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 个函数之间使用空格或斜杠 (/),因为它无法将句点识别为它的分隔符。

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

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,4)),_
                CLng(Mid(currString,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
,

我最终使用了以下代码:

doctrine:
dbal:
    driver: 'pdo_mysql'
    server_version: '5.5.68-MariaDB'
    charset: utf8mb4
    host: '%env(DATABASE_HOST)%'
    port: '%env(DATABASE_PORT)%'
    user: '%env(DATABASE_USER)%'
    password: '%env(DATABASE_PWD)%'
    dbname: '%env(DATABASE_NAME)%'
    url: '%env(resolve:DATABASE_URL)%'
                                                                                                                                                                                    

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

特别感谢 Simon,他的回答很有帮助!