在 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,他的回答帮了大忙!
我将日期格式化为文本。我想将这些日期的格式从 “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,他的回答帮了大忙!