首页> 疑难解答

有没有办法使用通配符来查找完全匹配?

withpy 2021-06-19

简介我知道通配符可用于在过滤时在单词的顶部找到其他字符。例如,如果我过滤“Sales”这个词,我可以将我的过滤器替换为“Sales *”来...

我知道通配符可用于在过滤时在单词的顶部找到其他字符。例如,如果我过滤单词“Sales”,我可以将我的过滤器替换为“Sales *”以查找前五个之外的其他字符。有没有办法使用一个字符来完全停止和过滤“销售”,即结果“销售操作”不包括在内?

我试过这个,我认为它有效,但后来发现它不是。

With Thisworkbook.Sheets("Sheet1")
    If .Range("A2").Value = "Sales" Then
        .Range("A2").Replace "Sales", "Sales?"
    End If
End With
1
投票

您不需要使用通配符功能。如果您使用“替换”功能录制宏,并选择“选项”并勾选Match entire cell contents,您将看到如下代码。

Sub Macro2()

    Cells.Find(What:="Sales", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
    ActiveCell.Replace What:="Sales", Replacement:="Foo", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.FindNext(After:=ActiveCell).Activate
End Sub

LookAt:=xlWhole实现了整场比赛。


1
投票

Replace Trouble

你没有在任何地方明确说过,但我假设你使用了你的代码:

With Thisworkbook.Sheets("Sheet1")
    If .Range("A2").Value = "Sales" Then
        .Range("A2").Replace "Sales", "Sales?"
    End If
End With

结果是它取代了Sales OperationsSales? Operations,你不想发生。

Replace方法有8个参数,而你只使用明显的前两个:

WhatReplacement

你的悲伤背后的原因是,由于你执行的最后一次FindReplace操作,第三个参数LookAt被设置为xlPart,这意味着它将在包含你的What参数“Sales”的单元格中找到或替换任何出现。通过将您的行更改为:

.Range("A2").Replace "Sales", "Sales?", xlWhole

现在,像LookAt一样,每次执行Replace或Find时,都会保存两个更重要的参数:

SearchDirectionMatchCase

每次执行ReplaceFind时,这也是最佳设置。

你应该仔细研究这两种方法,因为它们并不像人们想象的那么简单(容易)。

相关文章