加里(Gary)想要查找并替换“ sys”之类的缩写,然后将其替换为“ systems”。问题在于,如果他替换所有出现的事件,它将把“系统”的现有实例转换为“系统茎”。加里(Gary)可以检查每次发生的情况并单独进行替换,但这将是永远的。他想知道是否有一种方法可以像Word中那样使Excel仅用“系统”替换“ sys”的“整个单词”出现。

那些熟悉Excel的“查找和替换”功能的人乍一看可能会认为您可以使用“匹配整个单元格内容”

设置以完成工作。但是,如果缩写“ sys”是单元格中唯一的内容,则这仅适用。在加里的情况下,情况并非如此。他的短语和整个句子包含“ sys”(如“ sys admin”或“需要sys check”)。因此,他要求使用Word的“整个单词”设置。

考虑到这一点,您可以尝试一些方法。最适合您的解决方案将取决于工作表中文本的性质。

例如,如果唯一可能的混淆点是单词“ system”,

|那么最简单的方法就是将“ system”替换为唯一的东西,例如“ \ {[]}”。 (我喜欢括号和括号,因为它们在大多数数据中都是唯一的。)然后用“ systems”替换“ sys”,最后用“ system”替换“ \ {[]}”。

如果除“系统”之外还有其他混淆点,则可以求助于“查找内容”文本中添加空格。换句话说,搜索“ sys”(带空格),然后将其替换为“ system”(同样带空格)。只要sys后面没有标点符号,不在单元格的开头出现,并且不在单元格的结尾出现,这将正确找到所有出现的内容。

当然,您可以执行其他搜索以获取一些此信息。例如,您可以搜索“ sys”(仅末尾有空格)

查找出现在单元格开头的地方。搜索“ sys”(仅在开头有空格)对您没有好处,因为它会匹配任何以空格开头的“ system”出现。在顺序搜索中,您还可以搜索“ sys”,后跟句号,逗号,问号,感叹号,分号等。

如果您更喜欢使用宏,下面是如何解决该问题的一个示例。该宏提示您输入要查找的内容以及要替换的内容。

Sub ReplaceOnlySpecifirdWord()

Dim c As Range, rng As Range, rngArea As Range     Dim vFind As String, vReplace As String     Dim v As Variant     Dim arrSplit As Variant     Dim s As String     Dim i As Integer, n As Long     Dim b As Boolean     Const csDELIMITER = " "



On Error Resume Next     ' Reference Constants only     Set rng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)

If rng Is Nothing Then         MsgBox "There are no constants on active sheet...", vbExclamation         Exit Sub     End If     On Error GoTo 0

' Get Find and Replace strings     v = InputBox(Prompt:="Please enter String to be replaced.")

If v <> "" Then         vFind = v     Else         MsgBox "Wrong entry; app is going to be terminated.", vbExclamation         Exit Sub     End If

v = InputBox(Prompt:="Please enter Replace String.")

If v <> "" Then         vReplace = v     Else         MsgBox "Wrong entry; app is going to be terminated.", vbExclamation         Exit Sub     End If

Application.ScreenUpdating = False     Application.Calculation = xlCalculationManual     n = 0     For Each rngArea In rng.Areas         For Each c In rngArea.Cells             b = False             arrSplit = Split(c.Value, csDELIMITER)

For i = LBound(arrSplit) To UBound(arrSplit)

If arrSplit(i) = vFind Then                     arrSplit(i) = vReplace                     n = n + 1                     b = True                 End If             Next i             If b Then                 s = vbNullString                 For i = LBound(arrSplit) To UBound(arrSplit)

s = s & arrSplit(i)

If i <> UBound(arrSplit) Then                         s = s & csDELIMITER                     End If                 Next i                 c.Value = s             End If         Next c     Next rngArea

Application.Calculation = xlCalculationAutomatic     MsgBox "Replaced " & n & " words...", vbInformation End Sub

宏通过依次查找每个单元格中的所有单词来完成其工作。

如果单词与您要查找的单词匹配,则将其替换。然后将单元格内容放回原处。

这种方法有一个缺点:匹配非常直观。这意味着“ sys”将与“ sys”匹配,但不会与“ Sys”,“ SYS”或“ sys”后跟标点符号匹配。 (宏使用空格作为单词之间的定界符。)

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(13391)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。