仅替换Excel中的整个单词(Microsoft Excel)
加里(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。