我正在尝试在 Excel 中搜索和替换,该列的格式为“文本”。
寻找: [@
用。。。来代替: @
每当在单元格开头找到匹配项(即单元格内容以 [@ 开头并尝试将其替换为 @ 时),结果将出现错误“该函数无效”
我猜想由于 @ 运算符用于引用,这会导致单元格被以不同的方式解释(不再是文本)
我怎样才能使这个替换工作正常?
复制/粘贴到另一个程序中不是一个好选择,因为其中的一些单元格包含换行符。
答案1
令我惊讶的是,Excel 知道至少 4 种不同的方法来替换子字符串。
@
所有这些方法都可以按照您想要的方式处理行距。除了您在打开搜索和替换对话。
是@
文本占位符。。如果您在单元格中输入数值123
并将自定义格式设置为@
,则该单元格将被格式化为文本(对齐方式:右»左)。
这些示例都将用替换b
单元格 A1' 中的值。结果始终为。abc
123
a123c
1. 范围.替换()CTRL(与+H对话框相同)
[A1].Replace "b", "123", xlPart
句法: Range.Replace( What, Replacement, [LookAt], [SearchOrder], [MatchCase], [SearchFormat], [ReplaceFormat] )
2. 工作表函数.Replace()
[A1] = WorksheetFunction.Replace([A1], InStr([A1], "b"), Len("b"), "123")
句法: WorksheetFunction.Replace( old_text, start, number_of_chars, new_text )
3. 工作表函数.Substitute()
[A1] = WorksheetFunction.Substitute([A1], "b", "123")
句法: WorksheetFunction.Substitute( text, old_text, new_text, [nth_appearance] )
4. Replace()
[A1] = Replace([A1], "b", "123")
句法: Replace( Expression, Find, Replace, [Start, [Count, [Compare]]] )
回答 Loopo 的问题。您应该使用最后一种方法,因为它可以处理@
单元格值的开头。我使用 2 个输入框让它更方便一些。
Sub ReplaceFunction()
strFind = InputBox("Find what")
strReplace = InputBox("Replace with")
For Each cell In Selection
cell.Value = Replace(cell.Value, strFind, strReplace)
Next
End Sub