Страницы: 1 2 След.
RSS
Как удалить строчку если в ячейке пустое значение или ноль?
 
Коллеги, не кидайте камни и не отправляйте в поиск, был, нашел, но "502 Bad Gateway". Собрать код из отдельных отрывков разных постов не получилось ... увы  
 
Суть: есть таблица 65(столбцов)х65300(строк), в столбце "В" формулы, в некоторых ячейках выдает #НД.    
Вопрос: как макросом удалить полностью строчку у которой в ячейке в столбце "В" #НД или пустое значение?  
 
Заранее спасибо за помощь!
 
Хорошо бы примерчик строк на 10 в 2003 формате...
 
По поводу 502-ой ошибки: удалите куки в Вашем обозревателе.
 
Пример на 10 строк в приложении.
 
Доп.вопросы:  
1. У вас в оригинальном файле в столбце В - тоже только значения? Или там формулы?  
2. Может, сначала изменить формулу, чтобы не выдавала #НД, а выдавала вместо этого пустое значение, а потом уж удалять/скрывать строки по этому признаку?
 
В оригинальном файле формула, ВПР.    
Я и планирую ВПР засунуть в ЕСЛИОШИБКА и на выходе или значение или "0"/""  
Так и планировалось, удалить строчки у которых в столбце В пустая ячейка
 
Option Explicit  
 
Sub RowsDelete()  
Dim lRws As Long  
Dim i As Long  
   With Worksheets("Лист1")  
       lRws = .Cells(Rows.Count, "A").End(xlUp).Row  
         
       For i = lRws To 9 Step -1  
           If IsError(.Cells(i, 2).Value) Then .Rows(i).Delete  
           If .Cells(i, 2).Value = "" Then .Rows(i).Delete  
       Next i  
         
   End With  
End Sub
 
Юрий М: Спасибо, почистил, все заработало ))  
 
vikttur: еще не пробовал ))) сечас проверим...  
 
Еще вопрос: можно ли в одном макросе дважды использовать этот код? дело в том, что мне на двух листах одной книги надо почистить "пустые" строчки. Но макрос должен быть один, это auto_open, т.е. он работает ночью, обновляет данные!
 
выделяете весь столбец В и во вкладке главная щелкаете на значок "найти и выделить", во всплывающем меню "выделение группы ячеек", затем "формулы" и галочку устанавливаем только на "ошибки". Нажимаем найти, когда он выделит, нажимаете на любую выделенную ячейку правой кнопкой ->удалить...->строку. ВУАЛЯ!!!
 
Лита, нужно именно макросом! вручную может каждый ))))))
 
{quote}{login=renamax}{date=07.09.2012 10:08}{thema=}{post}Еще вопрос: можно ли в одном макросе дважды использовать этот код? дело в том, что мне на двух листах одной книги надо почистить "пустые" строчки. Но макрос должен быть один{/post}{/quote}With Worksheets("Лист1") - Это применительно к "Лист1". Добавьте аналогичный блок для второго листа. Если листов много, то, чтобы не перечислять и все, можно перебирать их циклом.
 
Спасибо, попробую!
 
Макрос не работает ((  
Поменял название столбца с "А" на "AZ", запустил, все 4-е ядра на полную загрузку на 15 минут и пришлось процесс остановить .... Что не так? )
 
Очевидно, что не так: не показываете файл.
 
{quote}{login=}{date=07.09.2012 12:56}{thema=}{post}Макрос не работает{/post}{/quote}Не верю!
 
Юрий М: пример в приложении. СИЛЬНО обрезанный, в 80% ячеек формулы, строк 65400, лиcтов в исходном файле 22, общий вес исходного файла примерно 80Mb ...  
Даже на этом примере макрос работает в цикле, долго, пришлось остановить.  
Возможно что то я сделал не так ...  
Цель: удались все строчки где в AX нет данных (не указана валюта)  
 
архив http://yadi.sk/d/CGE2pxGN_-X6 (большой)
 
Проверил: макрос отработал без отключения обновления экрана за 6 секунд, с отключением - за 3,8.    
Ваша ошибка: Требовалось проверять на "пусто" столбец "АХ" (это столбец № 50), а в коде стоит проверка столбца "В" (2)  
If .Cells(i, 2).Value = ""...    
Исправьте на 50.  
P.S. Впредь постарайтесь избегать утверждений, вроде этого - "Макрос не работает"
 
Спасибо за подсказку и помощь!  
Постараюсь избегать прямых формулировок )) буду более дипломатичнее ...
 
Я не понял - нафига я пример на 2 мб качал?  
 
Для примера на форуме:  
 
 
Sub tt()  
   With ActiveSheet.UsedRange.Columns(2)  
       .SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.Delete Shift:=xlUp  
   End With  
End Sub
 
Повозился, расставил #Н/Д, замерил макрос:  
1,1875  
1,375    
1,1875    
1,34375    
1,156    
То, что быстрее - без отключения обновления экрана!
 
Hugo, спасибо большое. Сегодня попробую ))) Мне скорость работы макроса важна!
 
Если на "живом" файле эрроры будут давать формулы (а не уже заменённые на их значения), то в коде замените  
xlCellTypeConstants  
на  
xlCellTypeFormulas  
Ещё для пустых можно использовать  
xlCellTypeBlanks  
Но тогда можно и что-то лишнее удалить - тогда нужно точнее диапазон проверки определять.
 
Hugo, небольшое уточнение: With ActiveSheet.UsedRange.Columns(2) - 2 - это номер столбца, где удаляем пустые строчки?  
Что то маркрос на "Shift:=" ругается ...    
 
Sub tt()  
With ActiveSheet.UsedRange.Columns(50).SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.Delete Shift:=xlUp  
End With  
End Sub
 
Тут важна каждая мелочь :)  
 
Sub tt()  
With ActiveSheet.UsedRange  
.Columns(50).SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.Delete Shift:=xlUp  
End With  
End Sub  
 
Правда если нечего удалять - тоже будет ругаться.
 
Hugo, спасибо, все работает супер, быстро, корректно ))))
 
Hugo, можно еще вопросик? )    
А как сделать так, что бы удаление строк начиналось с определенной строчки, что бы в шапке строчки не удалялись?
 
Вместо ActiveSheet.UsedRange укажите диапазон без шапки.  
А что, в шапке есть эрроры? :)
 
Hugo, простите, я не силен в VBA, только начинаю его изучать ... не могу понять что и куда вставлять ))) Могли бы полный код дать? ;)
 
Коллеги, очень нужна помощь!    
Как в этом макросе    
 
Sub tt()  
With ActiveSheet.UsedRange  
.Columns(50).SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.Delete Shift:=xlUp  
End With  
End Sub  
 
указать с какой строчки надо начинать удалять строчки (что бы шапку не трогать)?  
"Вместо ActiveSheet.UsedRange укажите диапазон без шапки" - как это сделать? )))
 
renamax, Вас Hugo спрашивал - откуда в шапке взяться ошибкам?
Страницы: 1 2 След.
Читают тему
Наверх