К моему удивлению, 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. WorksheetFunction.Заменить ()
[A1] = WorksheetFunction.Replace([A1], InStr([A1], "b"), Len("b"), "123")
Синтаксис: WorksheetFunction.Replace( old_text, start, number_of_chars, new_text )
3. WorksheetFunction.Замена()
[A1] = WorksheetFunction.Substitute([A1], "b", "123")
Синтаксис: WorksheetFunction.Substitute( text, old_text, new_text, [nth_appearance] )
4. Заменить ()
[A1] = Replace([A1], "b", "123")
Синтаксис: Replace( Expression, Find, Replace, [Start, [Count, [Compare]]] )
Чтобы ответить на вопрос Лупо. Вы должны использовать последний метод, так как он может обрабатывать @
в начале значения ячейки. Я сделал это немного более удобным с 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