Я создал инструмент в VBA для Excel, который анализирует файлы .xlsx, которые мы получаем на основе ряда критериев. Одним из них является количество пустых ячеек в наборе данных. Однако, к сожалению, я заметил, что ряд файлов, которые мы получаем, содержат ячейки со строками нулевой длины, которые «неправильно» считаются непустыми ячейками.
На самом деле очень полезно для всего процесса, если я могу просто удалить их из файла.
Я много гуглял эту проблему, но единственное решение, которое мне удалось найти, - это пройтись по всем ячейкам на листе (я также пробовал только константы, а также использовать Find, чтобы найти все zls) , Это не очень эффективно, поскольку рабочие листы содержат большое количество данных. РЕДАКТИРОВАТЬ: я также попробовал метод UsedRange.values = UsedRange.values, но это удаляет начальные нули, которые мне требуются.
Я также обнаружил, что это работает (- @ - это случайная строка, которая вряд ли будет единственной ячейкой в моих данных, и, если она есть, ее можно удалить):
ws.UsedRange.Replace what:=vbNullString, replacement:="-@-", _
lookat:=xlWhole, MatchCase:=False
ws.UsedRange.Replace what:="-@-", replacement:="", _
lookat:=xlWhole, MatchCase:=False
но если я делаю это только с помощью одной замены, это не так:
ws.UsedRange.Replace what:=vbNullString, replacement:="", _
lookat:=xlWhole, MatchCase:=False
С первым все в порядке, но есть ряд проблем:
- Это занимает вдвое больше времени, чем одна замена
- Не всегда ясно, произошел сбой или он продолжил работать
- Если произойдет сбой, у меня останется несколько ячеек, содержащих - @ -, что не всегда очевидно, и инструмент должен быть в порядке, чтобы его мог использовать тот, кто не понимает VBA.
Итак, мои вопросы:
- Есть ли способ сделать это, используя только одну замену? Почему замена работает с двойной заменой, а не с одиночной?
- Если первое невозможно, то есть ли способ «откатить» замену в случае сбоя кода?
- Есть ли способ обновления строки состояния, чтобы показать, как далеко проходит замена, чтобы доказать, что код выполняется (так же, как при запуске замены в самом Excel)?
- Или есть просто лучший способ сделать все это?
Заранее спасибо!
РЕДАКТИРОВАТЬ: К сожалению, из-за обрабатываемых данных мне нужно сохранить форматирование, включая ведущие нули
РЕДАКТИРОВАТЬ: Вот пример данных, которые я смотрю. Я хочу заменить строки нулевой длины (которые являются непустыми ячейками, в которых нет значения), чтобы они были действительно пустыми ячейками.