如何使用 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 注释中查找和替换日期格式的主要内容,如果未能解决你的问题,请参考以下文章