在 Word 文档中查找准确的数字
Find the exact digits in a Word Document
我试图在包含文本和数字的 Microsoft Word 文档中查找特定数字,但我不知道如何去做。为此,我想使用 VBA。
例如文档中的正文如下;
(1) 52.203-19, 这是一段文字
(2) 52.204-23,敏捷的棕狐跳过懒狗52次。
(3) 52.204-25,我尝试搜索解法52.204次。
(4) 52.2,虽然找不到任何运气
(5) 52.203,这让我大吃一惊 mac 2.36
现在我想找到整个数字“52.2”的确切数字,我不想找到 52.2[=32 的任何其他实例=] 是另一个数字的一部分,例如 52.203 或 52.204.
此外,当我想找到 52.203 时,我想排除所有实例,例如 52.203-xx,其中 xx 可以是任何两位数。
简而言之,我只想找到整个数字而不是数字之间的确切数字,就像 Excel 的 EXACT 函数一样。
我该怎么办?我应该使用 RegEx 还是应该通过 VBA 使用带有通配符的 Word 高级查找功能?这是我到目前为止所做的,没有任何运气,
Selection.Find.ClearFormatting
With Selection.Find
.Text = "52.2"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
但这会找到我不想要的所有实例。
正则表达式似乎是解决此问题的方法。
首先,在 VBA 编辑器中转到 Tools
> References
,确保勾选 Microsoft VBScript Regular Expressions 5.5
库。
下面的代码对你的示例文本有效,只删除了“(4)”之后的“52.2”,而不影响周围的任何字符:
Sub removeNumber()
Dim regExp As Object
Set regExp = CreateObject("vbscript.regexp")
With regExp
.Pattern = "\b52.2\b"
.Global = True
Selection.Text = .Replace(Selection.Text, "")
End With
End Sub
\b
表示单词边界,因此不会匹配“52.5”之前或之后的任何数字。
不需要正则表达式。您可以使用带通配符的查找。有关解释,请参阅 https://wordmvp.com/FAQs/General/UsingWildcards.htm
@TimothyRylatt 先生提出的解决方案非常适合我,特别是在添加 [!-] 以避免包含数字的连字符之后。但是,我需要通过 VBA 宏来实现这个解决方案,所以我像这样稍微修改了我的代码。
The working of Modified Code & the Code itself
Sub find_numbers()
Dim Str As String
'Create Search String for WildCard Search
Str = "<" & "52.203" & ">" & "[!-]"
Selection.Find.ClearFormatting
With Selection.Find
.Text = Str
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True 'make this option true to use WildCards
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
End Sub
我试图在包含文本和数字的 Microsoft Word 文档中查找特定数字,但我不知道如何去做。为此,我想使用 VBA。
例如文档中的正文如下;
(1) 52.203-19, 这是一段文字 (2) 52.204-23,敏捷的棕狐跳过懒狗52次。 (3) 52.204-25,我尝试搜索解法52.204次。 (4) 52.2,虽然找不到任何运气 (5) 52.203,这让我大吃一惊 mac 2.36
现在我想找到整个数字“52.2”的确切数字,我不想找到 52.2[=32 的任何其他实例=] 是另一个数字的一部分,例如 52.203 或 52.204.
此外,当我想找到 52.203 时,我想排除所有实例,例如 52.203-xx,其中 xx 可以是任何两位数。
简而言之,我只想找到整个数字而不是数字之间的确切数字,就像 Excel 的 EXACT 函数一样。
我该怎么办?我应该使用 RegEx 还是应该通过 VBA 使用带有通配符的 Word 高级查找功能?这是我到目前为止所做的,没有任何运气,
Selection.Find.ClearFormatting
With Selection.Find
.Text = "52.2"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
但这会找到我不想要的所有实例。
正则表达式似乎是解决此问题的方法。
首先,在 VBA 编辑器中转到 Tools
> References
,确保勾选 Microsoft VBScript Regular Expressions 5.5
库。
下面的代码对你的示例文本有效,只删除了“(4)”之后的“52.2”,而不影响周围的任何字符:
Sub removeNumber()
Dim regExp As Object
Set regExp = CreateObject("vbscript.regexp")
With regExp
.Pattern = "\b52.2\b"
.Global = True
Selection.Text = .Replace(Selection.Text, "")
End With
End Sub
\b
表示单词边界,因此不会匹配“52.5”之前或之后的任何数字。
不需要正则表达式。您可以使用带通配符的查找。有关解释,请参阅 https://wordmvp.com/FAQs/General/UsingWildcards.htm
@TimothyRylatt 先生提出的解决方案非常适合我,特别是在添加 [!-] 以避免包含数字的连字符之后。但是,我需要通过 VBA 宏来实现这个解决方案,所以我像这样稍微修改了我的代码。
The working of Modified Code & the Code itself
Sub find_numbers()
Dim Str As String
'Create Search String for WildCard Search
Str = "<" & "52.203" & ">" & "[!-]"
Selection.Find.ClearFormatting
With Selection.Find
.Text = Str
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True 'make this option true to use WildCards
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
End Sub