【问题标题】:Excel VBA Date ReplacementExcel VBA 日期替换
【发布时间】:2018-10-27 16:28:58
【问题描述】:

我在单元格中有一些日期作为 ISO 标准 (YYYY/MM/DD),但我被要求将其更改为 DD MMMMMMMM YYYY,例如2018 年 1 月 1 日。

一个单元格中有多个日期,我检查了几个网站,但找不到可以用来搜索 YYYY/MM/DD 格式并更改为 DD MMMMMMMM YYYY 的 VBA。

是否有人知道一些 VBA / 链接可以帮助一次性更改所有日期,而不是手动操作。

[

目前我已经尝试过,但我的 VBA 充其量低于新手,因此无法对以下解决方案进行逆向工程。 https://www.myonlinetraininghub.com/6-ways-to-fix-dates-formatted-as-text-in-excel

https://www.ozgrid.com/forum/.../excel.../93919-search-and-replace-date-with-vba

https://stackoverflow.com/.../find-replace-macro-that-properly-formats-a-date-cell

https://webcache.googleusercontent.com/search?q=cache:EIyJ2TGgqQMJ:https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-msoffice_custom-mso_2007/find-and-replace-date-in-vba-keeping-the-format/64377177-9b0f-4118-81ed-49d8f9ddc8f4+&cd=6&hl=en&ct=clnk&gl=uk

编辑: 下面使用 Karthick 的解决方案进行输出。唯一的问题是第一个日期已更改,但 ALT+Enter 的换行符丢失且格式不正确。

enter image description here

【问题讨论】:

  • 可以显示单元格数据吗?
  • 单元格值是常量还是来自公式?

标签: vba excel date excel-2010


【解决方案1】:

试试下面的公式

=TEXT(LEFT(C2,10),"DD MMMMMMMM YYYY")&MID(C2,11,LEN(C2))

输出

编辑

请使用 vba 代码获得您想要的结果。

Sub test()
    Dim a, b As String
    Dim str1, str2 As Long
    a = Range("C2").Value
    str1 = Split(a, Chr(10))
    str2 = UBound(str1)
    For i = 0 To str2
        b = b & Format(Left(str1(i), 10), "DD MMMM YYYY") & Mid(str1(i), 11, Len(str1(i))) & Chr(10)
    Next i
    Range("D2").Value = b
End Sub

VBA 输出

【讨论】:

  • 一个单元格中有多个日期,还想用公式怎么替换?
  • 这是一个有效的答案,您的示例在文本字符串的前 10 个字符上显示日期值。第二个日期字符串也应该在字符串中的指定位置再次出现。在 Karthick 的示例之后替换应该很容易......只需复制粘贴结果?否则使用 vba。
  • 嗨 Karthick,我尝试了您的建议,它替换了行中的第一个日期,但随后单元格的格式被破坏,所有内容都折叠成一行并丢失了 Alt+Enter 的换行符。
  • 设置自动换行
  • 非常感谢卡西克
【解决方案2】:

正则表达式将成为您此类事情的朋友。以下将匹配每个带有/ 作为分隔符的数字日期。然后它将找到每个匹配项并替换为DateFormat 变量指定的格式。将With ActiveSheet 更新为工作表的名称以显式声明它,您可能需要为自己的范围修改rng 变量

Option Explicit
Public Sub ConvertDateFormat()
    Dim rng As Range
    Dim RegExp As Object: Set RegExp = CreateObject("VBScript.RegExp")
    Dim DateFormat As String
    Dim c, d

    DateFormat = "DD MMMM YYYY"

    With ActiveSheet
        Set rng = .Range(.Cells(2, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 3))
    End With

    With RegExp
        .Global = True
        .Pattern = "(\d{2,4}(\/|(?=\s)|\d$)){3}"

        For Each c In rng
            If .test(c) Then
                For Each d In .Execute(c.Value2)
                    c.Value2 = Replace(c.Value2, d, Format(d.Value, DateFormat))
                Next d
            End If
        Next c
    End With
End Sub

【讨论】:

  • 谢谢,我试试看能不能搞定。
猜你喜欢
  • 1970-01-01
  • 2016-06-25
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2019-04-16
  • 1970-01-01
相关资源
最近更新 更多