4

Я пытаюсь найти и заменить в Excel, столбец отформатирован как «Текст».

Найти: [@

заменить: @

Всякий раз, когда это находит совпадение в начале ячейки, то есть содержимое ячейки начинается с [@, и пытается заменить это на @, результатом является ошибка «Эта функция недопустима»

Я предполагаю, что, поскольку оператор @ предназначен для ссылок, это приводит к тому, что ячейка интерпретируется по-разному (больше не как текст)

Как заставить эту замену работать?

Копировать / вставить в другую программу не очень удобно, потому что некоторые ячейки содержат разрывы строк.

1 ответ1

2

К моему удивлению, 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .