gpt4 book ai didi

excel - 将日期格式更改为 yyyy-mm-dd

转载 作者:行者123 更新时间:2023-12-02 03:14:15 25 4
gpt4 key购买 nike

我有一个日期列,其中包含混合格式的日期。例如:

A
21.03.1990
03/21/1990

因此,基本上一列中有两种不同的格式:dd.mm.yyyymm/dd/yyyy。我正在尝试编写一个 VBA 脚本来将列中所有日期的格式更改为 yyyy-mm-dd 。这就是我到目前为止所得到的:

Sub changeFormat()

Dim rLastCell As Range
Dim cell As Range, i As Long
Dim LValue As String

i = 1

With ActiveWorkbook.Worksheets("Sheet1")
Set rLastCell = .Range("A65536").End(xlUp)
On Error Resume Next
For Each cell In .Range("A1:A" & rLastCell.Row)
LValue = Format(cell.Value, "yyyy-mm-dd")
.Range("B" & i).Value = LValue
i = i + 1
Next cell
On Error GoTo 0
End With

End Sub

我知道这不是一段优雅的代码,但我是 VBA 初学者,所以请原谅我。该代码的问题在于,当我将 Format 函数中的参数从 yyyy-mm-dd 更改为 dd/mm/yyyy 时,它只是将未更改的 A 列重写为 B 列它有效,但仅适用于 mm/dd/yyyy 格式的日期,并且 dd.mm.yyyy 保持不变。我将不胜感激任何建议。

最佳答案

更新:新答案

这是一个可以完成这项工作的解决方案!子例程包含一个执行替换的函数(该函数本身非常有用!)。运行子程序,A 列中所有出现的情况都将被修复。

Sub FixDates()

Dim cell As range
Dim lastRow As Long

lastRow = range("A" & Rows.count).End(xlUp).Row

For Each cell In range("A1:A" & lastRow)
If InStr(cell.Value, ".") <> 0 Then
cell.Value = RegexReplace(cell.Value, _
"(\d{2})\.(\d{2})\.(\d{4})", "$3-$2-$1")
End If
If InStr(cell.Value, "/") <> 0 Then
cell.Value = RegexReplace(cell.Value, _
"(\d{2})/(\d{2})/(\d{4})", "$3-$1-$2")
End If
cell.NumberFormat = "yyyy-mm-d;@"
Next

End Sub

将此函数放在同一模块中:

Function RegexReplace(ByVal text As String, _
ByVal replace_what As String, _
ByVal replace_with As String) As String

Dim RE As Object
Set RE = CreateObject("vbscript.regexp")

RE.pattern = replace_what
RE.Global = True
RegexReplace = RE.Replace(text, replace_with)

End Function

工作原理:我有一个漂亮的 RegexReplace 函数,允许您使用正则表达式进行替换。 sub 几乎循环遍历您的 A 列,并对您提到的两种情况进行正则表达式替换。我首先使用 Instr() 的原因是确定它是否需要替换以及哪种替换。从技术上讲,您可以跳过此步骤,但对不需要它的单元进行替换确实成本高昂。最后,为了安全起见,我将单元格格式化为您的自定义日期格式,无论里面有什么内容。

如果您不熟悉正则表达式(引用:http://www.regular-expressions.info/),我使用的表达式是:

  • () 中的每个项目都是捕获组 - 也就是您想要搞乱的内容
  • \d 代表数字 [0-9]。
  • {2} 表示 2 个,{4} 表示 4 个。为了安全起见,我在这里明确表示。
  • 之前的\。在第一次替换中需要因为“.”有特殊意义。
  • 在 VBA 正则表达式中,您可以使用 $ + no 来引用捕获组。组的。这就是我翻转这 3 个项目的顺序的方法。

关于excel - 将日期格式更改为 yyyy-mm-dd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7106238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com