如何使用VBA将日期格式从mm/dd/yyyy改为dd/mm/yyyy

3

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

我的表格如下所示:

enter image description here

值得一提的是,这个表格是由报告工具自动生成的。是否可以通过“字符串操作”或任何Excel函数来解决问题?希望知道如何解决此问题的任何人都可以给我一些想法。


我假设日期对在单元格中。这些对是由短横线还是{空格短横线空格}分隔的? - Gary's Student
1个回答

3

从您提出的问题的措辞来看,我不确定您是否真正需要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(TRIM(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公式。 不知何故,我电脑上的Excel中的VBA版本DateValue可以接受那些日期。所以我会使用它。

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函数将自动使用您的Windows设置中的日期分隔符替换/。并且由于我使用了现代计算机友好的日期格式,我的分隔符是破折号...

脚注

*如果人们只使用 ISO 8601 ,那生活会变得容易得多。它存在有一个很好的理由。


非常感谢您长而清晰的回答,我一会儿会试试看 =D - user2634936

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接