Найти и заменить форсированный формат Scientifi c - PullRequest
5 голосов
/ 17 января 2020

Я бы хотел, чтобы Excel прекратил замену совершенно точной строки, содержащей E, с научным эквивалентом c при выполнении поиска и замены на VBA.

Я попытался принудительно вызвать его с помощью ReplaceFormat.NumberFormat = "@" безрезультатно.

Этот код иллюстрирует мою проблему:

Sub testsub()

ActiveSheet.Columns("A:A").NumberFormat = "@"

fnd = "2"
rplc = "39456E10"

Range("A1").Value = fnd
Range("A2").Value = rplc

Application.ReplaceFormat.NumberFormat = "@"

  ActiveSheet.Cells.Replace what:=fnd, Replacement:=rplc, _
    LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
    SearchFormat:=False, ReplaceFormat:=True
End Sub

И вот результат

enter image description here

Ответы [ 2 ]

3 голосов
/ 17 января 2020

Ну, в зависимости от того, сколько клеток вы получили в вашем Range объекте. Вы можете выбрать Application.Substitute метод.

Я думаю, если вы используете метод / функцию, которая явно возвращает тип данных String, вы будете в порядке. Поскольку Substitute делает именно то, что вы можете попробовать, как показано ниже:

Sub Test
    Range("A1:A2").Value = Application.Substitute(Range("A1:A2"), "2", "39456E10")
End Sub

Работая в предположении, ваш Range уже отформатирован как "@". Если нет, вы можете включить это в код. Это также будет работать для 2D-массива большего масштаба, например: A1:Z1000.

Например:

enter image description here> enter image description here


Я полагал, что то же самое относится, например, к методу RegEx.Replace и функции Replace (не ошибочно с методом Replace), например. Что вместо вышеперечисленного потребовало бы итерации.


Просто забавный факт, с помощью Application.Substitute мы могли бы также сказать VBA, какое вхождение нашего поискового значения мы хотели бы заменить. Например, заменить только 2-й случай числа 2:

enter image description here

Range("A1:A4") = Application.Substitute(Range("A1:A4"), "2", "39456E10", 2)

enter image description here


Однако, согласно @ Pᴇʜ его ответу , апостроф существует по причине ... =). Поэтому это будет моим личным предпочтением (и должно быть быстрее).

3 голосов
/ 17 января 2020

Просто поставьте апостроф ' перед строкой, чтобы убедиться, что при замене он считается строкой:

rplc = "'39456E10"

Апостроф не будет отображаться в ячейке Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...