vba - 如何使用 VBA 将 mm/dd/yyyy 更改为 dd/mm/yyyy

标签 vba excel date

我在使用 VBA 将 mm/dd/yyyy 转换为 dd/mm/yyyy 日期格式时遇到问题。

我有一个这样的表:

enter image description here

仅供引用,该表是从报告工具自动生成的。 “字符串操作”或任何 excel 函数有帮助吗?希望知道如何解决这个问题的人能给我一些想法。

最佳答案

好吧,从你对问题的措辞来看,我不相信你真的想要或需要 VBA。

查看您发布的图片,第一个单元格似乎包含字符串 05/06/2013 - 05/10/2013 而不是日期 05/06/2013。因此,您需要做的第一件事就是拆分各个部分,以便内置的 Excel 或 VBA 函数可以对其进行转换。

通过Excel公式

因此我们可以使用 SEARCH 或 FIND 来查找“-”并动态执行操作。但我觉得很懒,所以我假设字符串的前 10 个字符是第一个日期,最后 10 个字符是第二个日期。源字符串上的 TRIM 函数应该使它在前后有额外空格的情况下更安全一些。

因此,如果我们的字符串 05/06/2013 - 05/10/2013 在单元格 A2 中,我们可以输入 =LEFT(T​​RIM(A2),10)在 B2 中,=RIGHT(TRIM(A2),10) 在 C2 中。

现在这些仍然是字符串。通常我会使用 DATEVALUE 将字符串转换为日期,但我的 Excel 副本不喜欢那些疯狂的废话* 日期格式。所以我们将把日期解析到 DATE 函数中。放置 =DATE(RIGHT(B2,4),LEFT(B2,2),MID(B2,4,2))=DATE(RIGHT(C2,4),LEFT( C2,2),MID(C2,4,2)) 分别放入单元格 C2 和 D2。

从这里我们可以使用 TEXT 函数(很像 VBA 中的格式函数)和一些字符串连接将它们重新组合成原始的单单元格日期范围格式。假设这是期望的结果。

所以我们的最终单元格 F2 将是 =TEXT(D2,"dd/MM/yyyy") & "- "& TEXT(E2,"dd/MM/yyyy")。我们当然可以像这样将所有这些公式组合成一个大困惑:

=TEXT(DATE(RIGHT(LEFT(A2,10),4),LEFT(LEFT(A2,10),2),MID(LEFT(A2,10),4,2)),"dd/MM/yyyy") & " - " & TEXT(DATE(RIGHT(RIGHT(TRIM(A2),10),4),LEFT(RIGHT(TRIM(A2),10),2),MID(RIGHT(TRIM(A2),10),4,2)),"dd/MM/yyyy")

通过 Visual Basic for Applications

这里是相同的过程,只是使用 VBA 函数和语法而不是 Excel 公式。 现在无论出于何种原因,DateValue 的 VBA 版本将接受我的 Excel 副本中的这些日期。所以我会用它。

Public Function ChangeDateFormat(inputString As String) As String
  Dim firstDate As Date
  Dim secondDate As Date
  Dim trimmedInput As String
  trimmedInput = Trim$(inputString)
  firstDate = DateValue(Left$(trimmedInput, 10))
  secondDate = DateValue(Right$(trimmedInput, 10))

  ChangeDateFormat = Format(firstDate, "dd\/MM\/yyyy") & " - " & Format(secondDate, "dd\/MM\/yyyy")
End Function

Public Sub Test()
  Sheet1.[B2] = ChangeDateFormat(Sheet1.[A2])
End Sub

这可以通过运行提供的测试子来测试,或者 ChangeDateFormat 可以用作 excel 公式 =ChangeDateFormat(A2) 中的用户定义函数。

注意,在传递给 Format 的日期格式中,我将日期分隔符 \/ 转义了,而不是只将 / 放入。这是因为 Format 函数会自动替换/ 与 Windows 设置中的日期分隔符。由于我使用现代计算机友好的日期格式,我的分隔符是破折号...

脚注

* 如果人们只使用 ISO 8601,生活会轻松很多.它的存在是有原因的,一个很好的理由。

关于vba - 如何使用 VBA 将 mm/dd/yyyy 更改为 dd/mm/yyyy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18668817/

相关文章:

arrays - Excel VBA - 创建工作表名称数组

java - 使用 Joda 组合两个 Date 实例以创建日期时间

javascript - 如何将 unix 时间戳转换为 JavaScript 日期对象(考虑时区)

mysql - 如何返回MYSQL中大于6个月的项目?

excel - 创建具有多个 ParamArray 的函数时出现 "Compile Error"

excel - 运行时错误 1004 Excel 2013

excel - 用于选择和删除过滤的数据行的 Visual Basic 代码

vba - 有没有一种方法可以使用与 VBA 的默认分隔符 (vbCr/vbCrLf) 不同的分隔符一次一行地读取文件?

vba - Excel 2010 宏创建图表

R:是否有与 Stata 的 codebookout 命令等效的命令?