Найти / заменить ячейки в выбранном диапазоне с нулевыми значениями (ячейки формулы) с помощью VBA - PullRequest
1 голос
/ 14 июля 2020

Как я могу использовать «Найти / Заменить» (или любую другую альтернативу, если она доступна, кроме циклов) в VBA для замены ячеек в выбранном диапазоне с «0» на «1».

Примечание: все ячейки в выбранном диапазоне основаны на формулах, их результирующее значение будет "0".

Спасибо, Прасанна М

1 Ответ

0 голосов
/ 14 июля 2020

Разместите свои комментарии: Без циклов

Использование вычисления в диапазоне. Согласно Здесь .

для развернутые значения:

  Sub Test2()

  Dim rngData     As Range
    
  Set rngData = ThisWorkbook.Worksheets("Sheet1").Range("B1:G650000")
  rngData = Evaluate("Substitute(" & rngData.Address & "," & "0" & ", " & "1" & ")")
   End Sub

для завернутые значения:

Sub Test3()

Dim rngData     As Range


Set rngData = ThisWorkbook.Worksheets("Sheet1").Range("B1:G650000")
rngData = Evaluate("Substitute(" & rngData.Address & "," & "Char(34)&" & "0" & "& Char(34)" & ", " & "Char(34) &" & "1" & "& Char(34)" & ")")
End Sub

Кажется, мне очень хорошо. Я пробежал более 650000 строк, от B до G, менее чем за 3 секунды в первый раз, менее чем за 10 секунд во второй раз (у меня есть и другие вещи). 3-й, 4-й и 5-й раз весь диапазон был =CHAR(34)&RANDBETWEEN(0,1)&CHAR(34), 4-й и 4-й сгенерированы случайные 0,1 в диапазоне с формулой, 5-й - функция выбора и поиска, 6-й - поиск по таблице на другом листе. Всегда находил-заменял менее чем за 15 секунд. Я не думаю, что формулы в вашем листе имеют значение для макроса. Он смотрит только на ценности и меняет ценности. Его глубина и длина вашего диапазона имеют для него большее значение.

Я также отмечаю; следуя вашему предыдущему вопросу, вы могли бы создать там свои условия: чтобы изменить 0 на 1, только если / когда значения в диапазоне A являются 'Def', а не 'ab c', поэтому все это запускается с подпрограмма vba (но вы потеряете свои формулы , если не создадите те и в ней ).

3-й предлагаемый альтернативный soln:

Назначьте уникальные серийные номера или идентификаторы по строкам для всей таблицы, отфильтруйте DEF по столбцу A, скопируйте / удалите эти строки Def на лист 2, найдите-замените 0 на 1 там, вырежьте / удалите исходные строки Defs, вставьте Sheet2 Defs на листе 1. Сортировать по идентификатору. Работа выполнена. Это займет 1 мин. хорошо, может быть 2.

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