查找内容并替换为:MS Excel 使用两列查找和替换单元格内的多个字符
Find What & Replace With: MS Excel Find and Replace Multiple Characters within a Cell Using Two Columns
我尝试过同时使用 INDEX 和 MATCH,以及。 SUBSTITUTE 公式,两者都很棒,但不幸的是,它们都不能让我达到预期的结果,而且每个都有局限性。使用 MS Excel,在单元格 A2 中,我有一个包含多个字符和字母的文本,我想在字符串中替换它们(示例 A2:{Mr. and Mrs.} John Peterson_Jones {444} 585 /0000)。我还有两 (2) 个附加列,每个列都有标题(单元格 B1:"Find What" 和单元格 C1:"Replace With")。在 B2:B101 列(查找内容)中,我有一个单独的关键字、字母和字符列表,如果在单元格 A2 中找到任何特定关键字、字母或字符;将替换为相邻的查找内容 - 替换为列 C2:C101 中的关键字、字母或字符。
旧文本:{先生。 and Mrs.} John Peterson_Jones @ {444} 585/0000 新文本:John 先生和夫人 Peterson-Jones
查找 {, }, @, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 替换为空白值查找 "and" = 替换为“&”查找“_ " = 替换为 -(连字符)查找 "/" = 替换为 -(连字符)
如果你可以使用宏,那么你可以这样做:
For i = 2 To 101
findThese = Split(Range("B" & i), ",")
replaceWith = Range("C" & i).Value
replaceWith = Trim(replaceWith)
If Not IsEmpty(findThese) Then
For Each found In findThese
found = Trim(found)
Range("A2").Replace What:=found, Replacement:=replaceWith, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next
Else
findThis = Range("B" & i).Value
Range("A2").Replace What:=findThis, Replacement:=replaceWith, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
Next i
我以为你的意思是:
(来源:piombo.com)
使用 "find and replace" 功能 (ctrl+f) 比使用公式可能更快。 excel 中公式的问题是特定于单元格的,而不是特定于字符的。为了用你正在寻找的公式做你想做的事情,需要大量的嵌套 if 语句,这些语句需要花费相当长的时间来编写。
您可以做的另一个选择是文本到列,但此列之后的列必须为空,否则将覆盖值。
Select 列->数据选项卡->文本到列->定界->勾选框内带'@'的另一个框。这不会修复名称,但会将所有 phone 数字移动到另一列以进行批量删除。删除数字和 @ 符号后,只需替换括号和下划线即可。
我尝试过同时使用 INDEX 和 MATCH,以及。 SUBSTITUTE 公式,两者都很棒,但不幸的是,它们都不能让我达到预期的结果,而且每个都有局限性。使用 MS Excel,在单元格 A2 中,我有一个包含多个字符和字母的文本,我想在字符串中替换它们(示例 A2:{Mr. and Mrs.} John Peterson_Jones {444} 585 /0000)。我还有两 (2) 个附加列,每个列都有标题(单元格 B1:"Find What" 和单元格 C1:"Replace With")。在 B2:B101 列(查找内容)中,我有一个单独的关键字、字母和字符列表,如果在单元格 A2 中找到任何特定关键字、字母或字符;将替换为相邻的查找内容 - 替换为列 C2:C101 中的关键字、字母或字符。
旧文本:{先生。 and Mrs.} John Peterson_Jones @ {444} 585/0000 新文本:John 先生和夫人 Peterson-Jones
查找 {, }, @, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 替换为空白值查找 "and" = 替换为“&”查找“_ " = 替换为 -(连字符)查找 "/" = 替换为 -(连字符)
如果你可以使用宏,那么你可以这样做:
For i = 2 To 101
findThese = Split(Range("B" & i), ",")
replaceWith = Range("C" & i).Value
replaceWith = Trim(replaceWith)
If Not IsEmpty(findThese) Then
For Each found In findThese
found = Trim(found)
Range("A2").Replace What:=found, Replacement:=replaceWith, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next
Else
findThis = Range("B" & i).Value
Range("A2").Replace What:=findThis, Replacement:=replaceWith, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
Next i
我以为你的意思是:
(来源:piombo.com)
使用 "find and replace" 功能 (ctrl+f) 比使用公式可能更快。 excel 中公式的问题是特定于单元格的,而不是特定于字符的。为了用你正在寻找的公式做你想做的事情,需要大量的嵌套 if 语句,这些语句需要花费相当长的时间来编写。
您可以做的另一个选择是文本到列,但此列之后的列必须为空,否则将覆盖值。
Select 列->数据选项卡->文本到列->定界->勾选框内带'@'的另一个框。这不会修复名称,但会将所有 phone 数字移动到另一列以进行批量删除。删除数字和 @ 符号后,只需替换括号和下划线即可。