如何使用 VBA 在 Excel 注释中查找和替换日期格式

Posted

技术标签:

【中文标题】如何使用 VBA 在 Excel 注释中查找和替换日期格式【英文标题】:How to Find and Replace date format in Excel Comments using VBA 【发布时间】:2018-05-07 00:08:02 【问题描述】:

我的单元格带有如下注释:

2017 年 5 月 26 日:从 1000 减少到 900

我想使用 VBA 仅从以下位置查找和替换 cmets 中的日期格式:

MMMM DD, YYYY

YYYY/MM/DD

搜索几个小时后我能找到的最佳代码如下,但不幸的是,它只能用文本查找和替换文本。我试图让它与格式一起工作,但我做不到。

Sub ReplaceComments()
Dim cmt As Comment
Dim wks As Worksheet
Dim sFind As String
Dim sReplace As String
Dim sCmt As String
sFind = "2011"
sReplace = "2012"
For Each wks In ActiveWorkbook.Worksheets
For Each cmt In wks.Comments
sCmt = cmt.Text
If InStr(sCmt, sFind) <> 0 Then
sCmt = Application.WorksheetFunction. _
Substitute(sCmt, sFind, sReplace)
cmt.Text Text:=sCmt
End If
Next
Next
Set wks = Nothing
Set cmt = Nothing
End Sub

【问题讨论】:

评论的格式总是日期:描述吗? 不幸的是,正如我的问题中所述/所示,评论在日期旁边包含更多文字。不仅是日期。 考虑一下:提取字符串的左端直到:。尝试使用 DateSerial 将其转换为日期。如果它将生成的日期格式转换为 MMM DD、YYYY 并与原始提取的字符串进行比较。如果它们匹配日期格式为 YYYY/MM/DD 并替换字符串 【参考方案1】:

你可以试试下面这段代码。

确保在使用之前复制您的作品。 正如@Kevin 所说,成功将取决于数据输入期间使用的格式变化。 您提供的代码正在遍历工作簿中的所有工作表,是您想要的吗?

不过,如果不合适,请尝试并回来。

Sub test_comment()

Dim Wsh As Worksheet
Dim Cmt As Comment

For Each Wsh In ActiveWorkbook.Sheets
    For Each Cmt In Wsh.Comments
        If InStr(1, Cmt.Text, ":") > 0 Then
            St1 = Cmt.Text
            St2 = Format(Left(St1, InStr(1, St1, ":") - 1), "YYYY/MM/DD")
            Cmt.Text St2 & Mid(St1, InStr(1, St1, ":"))
        End If
    Next Cmt
Next Wsh

End Sub

多行新尝试:

Sub test_comment()

Dim Wsh As Worksheet
Dim Cmt As Comment

For Each Wsh In ActiveWorkbook.Sheets
    For Each Cmt In Wsh.Comments
        Arr1 = Split(Cmt.Text, Chr(10))
        For i = 0 To UBound(Arr1)
            If InStr(1, Arr1(i), ":") > 0 Then
                St1 = Arr1(i)
                St2 = Format(Left(St1, InStr(1, St1, ":") - 1), "YYYY/MM/DD")
                Arr1(i) = St2 & Mid(St1, InStr(1, St1, ":"))
                Cmt.Text Join(Arr1, Chr(10))
            End If
        Next i
    Next Cmt
Next Wsh

End Sub

【讨论】:

太棒了。它确实有效,但我注意到了一些事情。如果 cmets 中有几行带有 Date,它将仅在第一行起作用。如以下评论所示: 2014 年 8 月 20 日:从 3,499 美元降至 2,499 美元 2015 年 3 月 27 日:从 2,499 美元降至 1,999 美元 好代码,我会添加两个检查 1) 验证它是一个日期 2) 仅在需要时重新格式化 哇!惊人的。它完全按照我想要的方式工作。非常感谢!

以上是关于如何使用 VBA 在 Excel 注释中查找和替换日期格式的主要内容,如果未能解决你的问题,请参考以下文章

使用 Excel VBA 宏在 Word 中查找和替换页脚文本

VBA Word 从 Excel 中查找和替换 /&-

Excel VBA查找,用字符串中的日期替换纪元时间戳

Excel 怎么用VBA代码快速查找替换指定字符

如何使用 VBA 宏在 Excel 表中查找条件累积和

请教,在Excel 中使用VBA查找问题。