Страницы: Пред. 1 2
RSS
Удаление строк по значению
 
Обнаружилось (спасибо Юрию М), что в некоторых случаях могли возникать проблемы.  
Переписал код, прилагаю 2-ю версию  
Теперь в процедуру передаются не 3, а 2 параметра:  
1. Rng – ссылка на 1-ю ячейку (будут обработаны и все ниже) или на диапазон ячеек (будут обработаны только ячейки этого диапазона).  
2. DelValue - значение в диапазоне Rng для строк, которые должны быть удалены
 
Удаление с использованием (авто)фильтра намного медленнее приведенного макроса.  
В моём примере запустите TestData и сравните удаление автофильтром и макросом.
 
Владимир, спасибо! Проверил на 50 000 строк - 0,5 секунды.
 
Дим, всё верно - 1000 это уникальных. Я не так сформулировал :-)
 
Уважаемый ZVI, спасибо огромное. Отлично работает.  
Но теперь столкнулась с такой проблемой. Подскажите что делать если кто-то знает.  
Дело в том, что исходный файл идёт в формате .dbf 4.  
И сохранить его нужно в тот же формат. Но после использования макроса с циклом по удалению строк почему-то сохраняется только строка заголовка. Все остальные строки в dbf не сохраняются. Первый раз такое :) Совершенно не знаю что делать.
 
Проверил свой вариант кода с DBF-файлом и всё сработало корректно.  
Приложите пример DBF-файла и код вызова процедуры удаления строк, который вызывает проблемы.  
Учтите только, что, начиная с Excel 2007, DBF-файлы могут читаться Excel-ем, но не могут сохраняться в DBF-формате.
 
Именно по этой причине и работаем в 2003. Вписала в макрос копирование и вставку в новый лист. И уже оттуда сохраняю в dbf. Такой вариант тоже подходит.  
Пример потому что приложить не могу. Файл на работе, а пишу на форум из дома. Спасибо большое за помощь.
 
Копирование и вставку в новый лист делать необязательно.  
Достаточно загрузить DBF в Excel 2003, удалить в нем лишние строки (макросом), сохранить и закрыть файл.  
Приложил очередную 4-ю (3-я была внутренней) улучшенную версию кода и пример обработки DBF-файла.  
В примере макрос DbfTrueDel всё делает автоматически, смотрите комментарии в коде.
 
А как удалить все строки, где пустая ячейка столбце B с 5-ой строки?
 
В окошко поиска запрос: удалить строки по условию.
 
>>как удалить все строки, где пустая ячейка столбце B с 5-ой строки"  
 
ZVI_DelRows Range("B5"), ""
 
{quote}{login=ZVI}{date=04.04.2011 04:17}{thema=DelRows версия 2}{post}Переписал код, прилагаю 2-ю версию...{/post}{/quote}  
Здравствуйте, тоже хотел бы попросить некоторую модификацию кода. В моем случае необходимо в конкретном столбике екселя находить ячейки со значениями "Страница 1", "Страница 2" "Страница 3" и т.д. и удалять строки, содержащие эти ячейки. Поскольку это товарная накладная, я не могу воспользоваться кодом, который ищет эти "Страница #" по всему екселю (в наименовании товара может быть слово "Страница" и код удалит товар). Соответственно мне нужно локализовать поиск  по одному конкретному столбцу. Спасибо.
 
Здравствуйте, Андрей!  
 
Посмотрите приложенный вариант версии 5, он поддерживает символ звездочки (*) , который означает любой(ые) символ(ы). Для Вашего случая подойдет такой вызов:  
ZVI_DelRows ActiveSheet.Range("A:A"), "Страница *"  
Кнопка на листе1 вызывает макрос FuzzyDel именно с такой строкой кода.  
 
В 5-й версии можно задавать полный столбец, диапазон обработки при этом все равно будет ограничен используемой областью данных листа.  
 
Если указать только первую верхнюю ячейку диапазона, то обработка будет произведена от неё до последней строки используемой области, например, с  ячейки A5:    
ZVI_DelRows ActiveSheet.Range("A5"), "Страница *"
 
Здравствуйте, ZVI. Спасибо большое за программу - профессионально и  работает на ура. Если не покажется хамством, то спросил бы еще один момент. В моем случае (сохраненная в ексель Накладная) часто за разрывом страниц (Страница 1, Страница2 и т.д.) повторяется шапка накладной , т.е. несколько фиксированных строк (товар, ОКЕИ и т.д.). Возможно ли удаляя строчку , которую вашим кодом мы находим по определенной колонке (Значение в колонке: "Страница #"), следующим шагом удалить и 2 или 3 строчки следующие  за ней ?  
 
Спасибо.
 
Добавил еще один (необязательный) аргумент, задающий количество удаляемых строк вместе с каждой найденной.  
Вызов для удаления по 2 строки: ZVI_DelRows ActiveSheet.Range("A5"), "Страница *", 2  
 
Расширил также поддержку символов нечеткого поиска:  
* - любой(ые) символ(ы), или отсутствие символов;  
? - любой символ, обязательно присутствующий;  
# - цифровой символ, обязательно присутствующий.
 
Спасибо огроменное. Сэкономил кучу времени, используя ваш макрос.
Страницы: Пред. 1 2
Наверх