Excel удалить строку vba excel

Как в excel удалить нужную строку через VBA

Конечно можно. Ставишь на запись макрос, выполняешь какие нужно действия(удаление строки), останавливаешь запись. Открываешь Макросы->Изменить и смотришь какой код получился.
Будет примерно так:

Вообще-то, при удалении строки необходимо уменьшать счётчик, ибо в противном случае могут остаться строки, содержащие «-» (разумеется, если «-» содержатся в смежных ячейках) или начать удаление снизу вверх, т.е.

Private Sub Test()

Application.ScreenUpdating = False
Dim rw&
For rw = 100 To 1 Step -1
If Cells(rw, 1) = «-» And Cells(rw, 2) = «-» Then Rows(rw).Delete
Next
Application.ScreenUpdating = True

Чуть не забыл 🙂 если в дальнейшем потребуется проверять наличие «-» в большем количестве столбцов, чем сейчас, то вместо увеличения And или дополнительного цикла по столбцам, можно программно воспользоваться стандартной функцией рабочего листа =СЧЁТЕСЛИ() (см. листинг)

Private Sub Test2()

Dim rw&, ws As Worksheet
Set ws = ActiveSheet

Как удалить строки по условию?

Предположу, что почти каждый сталкивался с ситуацией, когда необходимо удалить только определенные строки: имеется большая таблица и необходимо удалить из неё только те строки, которые содержат какое-то слово (цифру, фразу). Для выполнения подобной задачи можно воспользоваться несколькими способами.

Способ первый:
Использовать встроенное средство Excel — фильтр. Сначала его необходимо «установить» на листе:

  • Выделяем таблицу с данными, включая заголовки. Если их нет — то выделяем с самой первой строки таблицы, в которой необходимо удалить данные
  • устанавливаем фильтр:
    • для Excel 2003 : ДанныеФильтрАвтофильтр
    • для Excel 2007-2010 : вкладка Данные (Data)Фильтр (Filter)(или вкладка Главная (Home)Сортировка и фильтр (Sort&Filter)Фильтр (Filter) )

Теперь выбираем условие для фильтра:

  • в Excel 2003 надо выбрать Условие и в появившейся форме выбрать непосредственно условие(«равно», «содержит», «начинается с» и т.д.), а напротив значение в соответствии с условием.
  • Для 2007-2010 Excel нужно выбрать Текстовые фильтры (Text Filters) и либо сразу выбрать одно из предлагаемых условий, либо нажать Настраиваемый фильтр (Custom Filter) и ввести значения для отбора в форме

После этого удалить отфильтрованные строки. В 2007 Excel могут возникнуть проблемы с удалением отфильтрованных строк, поэтому рекомендую сначала так же прочитать статью: Excel удаляет вместо отфильтрованных строк — все?! Как избежать.

Способ второй:
применить код VBA, который потребует только указания значения, которое необходимо найти в строке и номер столбца, в котором искать значение.

Sub Del_SubStr() Dim sSubStr As String ‘искомое слово или фраза(может быть указанием на ячейку) Dim lCol As Long ‘номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim lMet As Long Dim arr sSubStr = InputBox(«Укажите значение, которое необходимо найти в строке», «Запрос параметра», «») If sSubStr = «» Then lMet = 0 Else lMet = 1 lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «Запрос параметра», 1)) If lCol = 0 Then Exit Sub lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count arr = Cells(1, lCol).Resize(lLastRow).Value Application.ScreenUpdating = 0 Dim rr As Range For li = 1 To lLastRow ‘цикл с первой строки до конца If -(InStr(arr(li, 1), sSubStr) > 0) = lMet Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

Если значение sSubStr не будет указано, то будут удалены строки, ячейки указанного столбца которых, пустые.
Данный код необходимо поместить в стандартный модуль. Вызвать с листа его можно нажатием клавиш Alt + F8 , после чего выбрать Del_SubStr и нажать Выполнить. Если в данном коде в строке
If -(InStr(Cells(li, 1), sSubStr) > 0) = lMet Then
вместо = lMet указать <> lMet , то удаляться будут строки, не содержащие указанное для поиска значение. Иногда тоже удобно.
Но. Данный код просматривает строки на предмет частичного совпадения указанного значения. Например, если Вы укажете текст для поиска «отчет», то будут удалены все строки, в которых встречается это слово(«квартальный отчет», «отчет за месяц» и т.д.). Это не всегда нужно. Поэтому ниже приведен код, который будет удалять только строки, указанные ячейки которых равны конкретно указанному значению:

Sub Del_SubStr() Dim sSubStr As String ‘искомое слово или фраза(может быть указанием на ячейку) Dim lCol As Long ‘номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim arr sSubStr = InputBox(«Укажите значение, которое необходимо найти в строке», «Запрос параметра», «») lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «Запрос параметра», 1)) If lCol = 0 Then Exit Sub lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count arr = Cells(1, lCol).Resize(lLastRow).Value Application.ScreenUpdating = 0 Dim rr As Range For li = 1 To lLastRow ‘цикл с первой строки до конца If CStr(arr(li, 1)) = sSubStr Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

Здесь так же, как и в случае с предыдущим кодом можно заменить оператор сравнения( Cells(li, lCol) = sSubStr ) с равно на неравенство( Cells(li, lCol) <> sSubStr ) и тогда удаляться будут строки, значения ячеек которых не равно указанному.

УДАЛЕНИЕ СТРОК НА ОСНОВАНИИ СПИСКА ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
Иногда бывают ситуации, когда необходимо удалить строки не по одному значению, а по нескольким. Например, если строка содержит или Итог или Отчет. Ниже приведен код, при помощи которого можно удалить строки, указав в качестве критерия диапазон значений.
Значения, которые необходимо найти и удалить перечисляются на листе с именем «Лист2». Т.е. указав на «Лист2» в столбце А(начиная с первой строки) несколько значений — они все будут удалены. Если лист называется иначе(скажем «Соответствия») в коде необходимо будет «Лист2» заменить на «Соответствия». Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.

Читать еще:  Как в excel вставить несколько строк между строками

Sub Del_Array_SubStr() Dim sSubStr As String ‘искомое слово или фраза Dim lCol As Long ‘номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim avArr, lr As Long Dim arr lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «Запрос параметра», 1)) If lCol = 0 Then Exit Sub Application.ScreenUpdating = 0 lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count ‘заносим в массив значения листа, в котором необходимо удалить строки arr = Cells(1, lCol).Resize(lLastRow).Value ‘Получаем с Лист2 значения, которые надо удалить в активном листе With Sheets(«Лист2») ‘Имя листа с диапазоном значений на удаление avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With ‘удаляем Dim rr As Range For lr = 1 To UBound(avArr, 1) sSubStr = avArr(lr, 1) For li = 1 To lLastRow ‘цикл с первой строки до конца If CStr(arr(li, 1)) = sSubStr Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If DoEvents Next li DoEvents Next lr If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

Чтобы код выше удалял строки не по точному совпадению слов, а по частичному(например, в ячейке записано «Привет, как дела?», а в списке есть слово «привет» — надо удалить, т.к. есть слово «привет»), то надо строку:

Удаление строки в Excel VBA

У меня есть эта часть кода, которая находит строку excel из списка и удаляет элементы из списка. Я хочу. также удалить строку Excel.

Где я добавил ws.Range(Rand, 1).EntireRow.Delete — это то, где я хочу удалить всю строку, но я не знаю, как это сделать. Я хочу. если он найдет то же значение в ячейке, что и в некоторых выбранных элементах моего списка, чтобы иметь возможность удалять как целую строку в excel, так и элемент из списка. Он работает, чтобы удалить элемент из списка, но я также не знаю, как удалить строку.

Решение Chris Nielsen прост и будет хорошо работать. Немного более короткий вариант будет.

. обратите внимание: нет необходимости указывать Shift при удалении строки, поскольку по определению невозможно сдвинуть влево

Кстати, мой предпочтительный метод для удаления строк — использовать.

. в исходном цикле. Затем я использую функцию сортировки, чтобы подтолкнуть эти строки к нижней части данных. Основная причина этого заключается в том, что удаление отдельных строк может быть очень медленной процедурой (если вы удаляете > 100). Это также гарантирует, что ничто не будет пропущено согласно комментарию Роберта Ильбринка.

Вы можете узнать код для сортировки, записав макрос и уменьшив код, как показано в этом экспертном видео Excel. У меня есть подозрение, что самый аккуратный метод (Range ( «A1: Z10» ). Sort Key1: = Range ( «A1» ), Order1: = xlSortAscending/Descending, Header: = xlYes/No) может быть обнаружен только на предварительном этапе, 2007 версии Excel. но вы всегда можете уменьшить эквивалентный код 2007/2010

Еще пару очков. если ваш список еще не отсортирован по столбцу, и вы хотите сохранить заказ, вы можете вставить номер строки «Rand» в запасном столбце справа от каждой строки при прохождении цикла, Затем вы сортируете по этому комментарию и устраняете его

Если ваши строки данных содержат форматирование, вы можете найти конец нового диапазона данных и удалить ранее удаленные строки. Чтобы сохранить размер файла. Обратите внимание, что одно большое удаление в конце процедуры не будет ухудшать производительность вашего кода так же, как удаление отдельных строк

Excel удалить строку vba excel

удалить строку целиком (VBA)

​Смотрите также​​ чтобы удалить эти​ туда добавлю Error​
​ и для этого​: вот так будет​
​Next​Sheets(«Недостача»).UsedRange.Offset(1).Columns(«C»).SpecialCells(xlBlanks).Rows.Delete​
​Штурмaн​ To 1 Step​Сергей​
​Сергей​ только половину строк​
​ Set MyArea =​ коды тегами. Значок​ Long, LastRow As​ до последней заполненной​ дата​
​hk1209​ строки​ вроде будет нормально​
​ достаточно одного массива,​ лучше, учитывая все​.ClearContents​End Sub​: Сергей. ​ -1 If IsEmpty(Cells(i,​sergmagunov​kir31​ с пустыми ячейками.​ Range(‘A1’).CurrentRegion MyAreaRow =​ «» среди кнопок​ Long Application.Calculation =​ ячейки определенного столбца?​wowick​

​: всем доброго времени​​Во второй формуле​LightZ​ в к-ром просто​ данные, с двумя​.Parent.Range(«C1»).Resize(i) = arr()​
​правде если пустых​Спасибо просто огромное.​ 2)) = True​: Сергей. ​: Ребят. ​ Т.е. если первоночально​ MyArea.Rows.Count MyRow =​ вверху при создании​

​ xlCalculationManual Application.ScreenUpdating =​​спасибо за потраченное​: А сравниваете вы​

​ суток​​ — макрос ругается​: Задача удалить пустые​ перекладывать строки к​ массивами:​End With​ ячеек не будет,​ Всё работает. Всё​

​ Then Cells(i, 2).EntireRow.Delete​​Спасибо огромное. Макрос​
​Я бы конечно​ было 3000 строк​ ‘B1:B’ & Trim(Str(MyAreaRow))​ сообщения.​

​ False For rw​​ драгоценное время​ ее с ТЕКСТОМ​извините, что вас​ на строку​ строки или не​ верху. Так экономней.​Dim arr1()​

​ikki​​ появиться ошибка. тогда​ просто отлично. Спасибо​
​ ‘меня ‘ем столбцы​ работает, всё прерасно,​
​ рад что то​
​ то после запуска​ ‘последняя строка диапазона​Hugo​ = ActiveSheet.UsedRange.Row +​Sanja​ «20.11.2013». В экселе,​ беспокоил​Rows(Columns(1).find(mas(ind-1)).row).Delete Shift:=xlUp​ пустые?​Daulet​Dim arr2()​
​: разные способы -​ можно добавить обработчик​ что всё так​ в Cell(i,2) -​
​ есть только один​ сам там попробовать,​ макроса остаётся 1500​ Set Stolbik =​
​: Супербыстрое удаление строк​ ActiveSheet.UsedRange.Rows.Count — 1​: Для ускорения выполнения​ как и во-многих​
​у меня такая​Helen_fire​

​Во вложении два​​: LightZ Ваш последний​Dim j As​ для разных целей.​
​ ошибок.​ подробно разъяснили.​
​ i — строка,​ маленький вопрос к​ с вашими предложениями,​ строк, после повторного​ Range(MyRow) ‘задаем область​
​ от ZVI есть​

​ To FirstRow Step​​ кода отключите автоматический​ других средах программирования​ проблема​: на строку​ готовых варианта​ код массивный замечателен,​ Long​использование Delete медленно​
​Daulet​Кирилл.​ 2 — столбец​ вам. Как я​ но если говорят​ ​ запуска остается 750​
​ в столб Б​ тут:​ -1 If Cells(Rows.Count,​ пересчет:​
​ в кавычках подразумевает​есть таблица и​Rows(Columns(1).find(mas(ind-1)).row).Delete Shift:=xlUpмакрос может​

Читать еще:  Как в excel разделить строку на две

​Daulet​​ но чуть исправил​Dim i As​ в т.ч. потому,​: AKSENOV 048 Спасибо​
​А я делаю​ Next i Application.ScreenUpdating​ понял макрос работает​ мозгов нет, то​
​ строк. Вообщемто он​ ‘Сканирование и удаление​Можно использовать и​ 9).End(xlUp).Row

Удаление строк в Excel на VBA.

​ пустые ячейки удалять)​​ но действенно​Geji​ работал на третий​ эту тему, то​ запускать макрос. Эту​ VarType(CurrObj) ‘Если тип​ даты​ там не правильно,​ с данными в​ Rows(rw).Delete ‘номер 9​ удалить строку целиком,​ работает.из индекса вычитается​Надо в таблице​ Long​With Sheets(1).Range(«A2»).CurrentRegion​вариант с массивом​ простите.​Daulet​: Кирилл, все на​ столбец или на​
​ я вам просто​ проблему никак нельзя​ данных пусто, то​hk1209​ но не могу​ 9-м столбце:​ — 9-й столбец​ если дата меньше​ 1, поскольку нумерация​ Excel удалить строки​Dim ii As​iColumns = .Columns.Count​ действительно много быстрее,​SpecialCells(xlConstants, 1)​: Здравствуйте!​ самом деле просто.​ какой другой? Конечно​ безгранично благодарен буду.​ устранить? Я сам​ удаляем всю строку​: The_Prist спасибо за​ понять где именно​Cells(Rows.Count, 9).End(xlUp).Row​Hugo​ 20.11.2013 г. и​ элементов в массиве​

​ в графе А​​ Long​ReDim arr2(1 To​ но с формулами​LightZ​Хочу удалить строк​ Прямо по коду:​ если вам не​

​А то что​​ в этом вобщемто​ If TipData =​ потраченное драгоценное время​прошу вашей помощи​Hugo​: То что там​ поднимать на вверх​ по умолчанию идет​ в которых указаны​

​Dim iColumns As​​ .Rows.Count, 1 To​ и форматами придется​: ABC, если Вы​ не пустых ячеек​Sub MyOwnDelete() Dim​ трудно то подскажите!​ вы написали, это​ ничего не понимаю,​ 0 Then h​ и советы (включая​спасибо за понимание​: 4. Обрабатывать массивы,​ дата — это​написал следующий код,​ с нуля. Поэтому​ тексты :​ Integer​ iColumns)​ распрощаться. а уж​ будете удалять строки​ столбце C, или​ i As Long,​Я пытался поработать​ конечно очень интересно,​ поэтому расчитываю на​ = CurrObj.Row CurrObj.EntireRow.Delete​ код)​The_Prist​ а не ячейки​ ещё не факт.​ но неработает, прошу​

​ когда закладываете число​​»Итого по счету»,​With Sheets(«Недостача»).Range(«A2»).CurrentRegion​arr1 = .Value​ если на этот​ на большом объеме​ не так делаю​ x As Long​
​ со строкой:​ но не для​
​ вашу помощь. Заранее​ ‘удаляет всю строку​Hugo — спасибо​: Cells(Rows.Count, 9).End(xlUp).Row «» Then​ результат может быть​Лучше с помощью​With Sheets(«Недостача»)​ т.е. С1,D1 и​ нефига не получилось.​sergmagunov​ в том, что​: For rwIndex =​ всем и хорошего​
​FirstRow — значение​

​ один раз сразу​​hk1209​
​ Date For rw​ варианта:я просто скидывала​Helen_fire​arr1 = .Value​i = i + 1​ катастрофическим :)​ двух массивов, на​For d =​ т.д. x =​ Он выдавал какую-то​: Что-то все просто​ при удалении строки​ 1 To 25​ рабочего дня и​ 0. Как минимум​
​ с группой.​: Sanja спасибо за​
​ = 100 To​ вариант строки, а​: Все очень просто.​For j =​For ii =​KuklP​
​ 20к строк -​ 2 To .Cells(Rows.Count,​
​ ActiveCell.Offset(65535, 0).End(xlUp).Row For​ ошибку в строке​ проигнорировали меня. Я​ с номером N,​ With ActiveSheet.cells(rwIndex, 2)​ вечера​ под конец ошибку​
​5. Как я​
​ подсказку​

​ 1 Step -1​​ так его тоже​ Можно взять для,​ 2 To .Rows.Count​
​ 1 To iColumns​: Богдан, это с​ скорость 00:00 сек,​ 1).End(xlUp).Row​ i = x​x = ActiveCell.Offset(65535,​ конечно понимаю что​ остальные строки сдвигаются. ​ If .Value =​DiSco​ получите.​ уже сказал -​в таблице примерно​ If Cells(rw, 9)​ надо было ставить​ в принципе «итого».​If arr1(j, 3)​arr2(i, ii) =​ одним массивом:-)​ а выполнение вышеуказанных​If .Cells(d, 3).Value​ To 1 Step​
​ 0).End(xlUp).Row​

​ всё не так​​ Т.е. (N+1)я строка​ vbEmpty Then .EntireRow.Delete​: Прошу помощи у​
​Hugo совсем иное​ использовать переменную, а​ 100 тыс строк​ «» Then​ -1 If IsEmpty(Cells(i,​Конечно если это​ уж просто, но​ становится Nй. ​ End With Next​ специалистов. Есть массив​ советовал..​ не 100000 раз​использую следующий код:​ Rows(rw).Delete ‘номер 9​ потом использовать FindNext.​
​ так:​

​i = i + 1​​Next​: KukLP​ не дождался :(​.Rows(d).EntireRow.Delete​
​ 2)) = True​ у вас не​ может кто-нибудь поможет,​
​И в рассмотрение​ rwIndex​ (2 столбца) на​

​До начала цикла:​​ делать CDate(«20.11.2013″​
​Private Sub Test()​ — 9-й столбец​А лучше сделайте​Rows(Columns(1).find(«*итого*»).row).Delete Shift:=xlUpИли прописать​For ii =​
​End If​

​а да, точно,​Сделал для одного​
​End If​ Then Cells(i, 2).EntireRow.Delete​ зайсёт слишком много​ напишет макрос для​

Удаление строк VBA

​ не попадает. ​​kir31​
​ одном листе. Со​dim dDt as​.​ Application.ScreenUpdating = False​ Next Application.ScreenUpdating =​

​ цикл еще короче​
​ удаление каждого по​
​ 1 To iColumns​
​Next​ с одним​ столбца. Или Вам​
​Next​ ‘меня ‘ем столбцы​
​ времени, то может​
​ удаления строк с​
​Для этого надо​
​: Public Sub del_empty_cells()​
​ временем в одном​

​ Date dDt =​​6. Зачем непременно​ Dim rw As​ True End Subспасибо​

​While Not Columns(1).Find(«*итого*»)​ отдельности:​arr2(i, ii) =​
​Sheets(1).Range(«A2:C» & Cells(Rows.Count,​
​вместо For Next​

​ нужно на несколько?​​End With​ в Cell(i,2) -​

​ вы ещё кое​​ пустыми ячейками.​

​ использовать цикл While​​ Dim r As​

​ столбце некоторые ячейки​
​ CDate(«20.11.2013»)И уже в​
​ удалять строки? Может​

​ Date For rw​ за потраченное драгоценное​ Is Nothing Rows(Columns(1).Find(«*итого*»).Row).Delete​Dim mas dim​ arr1(j, ii)​

​ 1).End(xlUp).Row).ClearContents​​ использовал For Еach​ Просто примера нет.​

​End Sub​​ i — строка,​ что напишите по​Заранее благодарен.​ и управлять изменением​
​ Integer Dim nr​

​ оказываются пустыми. Надо​​ цикле:​ просто переложить данные,​ = 100000 To​ время​ Shift:=xlUp Wend​ ind mas=array(«итого по​
​Next​Sheets(1).Range(«A2»).Resize(i, iColumns).Value =​ Next, так бы​Dim elem​ikki​ 2 — столбец​ этому поводу.​
​kir31​ счетчика цикла вручную. ​ As Integer r​ удалить (НЕ очистить)​

​If Cells(rw, 9)​
​ затереть ненужное?​
​ 1 Step -1​Hugo​

​bobosafed​ счету*»,»итого по отделу*»,​
​End If​ arr2​ было бы 2​
​Dim arr()​: при удалении строки​
​ Next i Application.ScreenUpdating​Заранее благодарен.​
​: Вот рабочий код:​
​ Т.е. после удаления​ = 1 nr​
​ те строки, к​
​ ​ снизу вверх​

Читать еще:  Excel перенос на новую строку в ячейке

Удаление определенных строк в Excel

​range(‘my_range’).SpecialCells(xlCellTypeBlanks).EntireRow.DeleteДля удаления всех​​ [B1].Select ‘меняем столбец​ 2)) = True​
​ начала документа, а​ ненужные строки с​ силен в ооп.​ Long, dDt As​ к сожалению не​
​ строк разные бывает​ быть переменная типа​в колонке А​если есть строчки​
​ ругается на строку​

​ с массивом(и это​​ но скорее всего​ «» Then​Daulet​ пустых строк в​ не меняя строки,​
​ Then Cells(i, 2).EntireRow.Delete​ с конца, тогда​ пустыми ячейками, я​
​ Благодарю за помощь.​ Date, avItems, lLastR​ работает​ больше или меньше​ дата с нужной​ написано «Итоги» ?​ «итого по счету»​

​ (Ошибка 1004)​​ было бы еще​ не оригинал, для​i = i + 1​: ikki, LightZ Спасибо!​ текущем столбце:​
​ т.е. С1,D1 и​ Next i Application.ScreenUpdating​ сдвиг строк не​ воспользовался вашим макрасом.​Dim Stolbik As​ As Long lLastR​Private Sub Test()​
​ 100 тыс строк​ датой.​Helen_fire​
​ и «итого по​

​->Sheets(«Недостача»).Range(«A2»).Resize(i, iColumns).Value =​​ быстрей), тогда да.​
​ которого делается макрос​arr(i, 1) =​AKSENOV 048​c = ActiveCell.Column​ т.д. x =​ = True End​ будет влиять на​ Он вобщемто работает​ Range ‘Область сканирования​ = Cells(Rows.Count, 9).End(xlUp).Row​ Dim rw As​что надо дописать,​hk1209​: вообще-то этим кодом​ субсчету» надо запускать​
​ arr2​KuklP​ :)​ elem​: вот такой вариант​ Range(Cells(1, c), Cells(65536,​ ActiveCell.Offset(65535, 0).End(xlUp).Row For​
​ SubНадеюсь — это​ результат. Если нужно,​
​ просто с некоторыми​ Dim CurrObj As​ If lLastR​

​ Long, FirstRow As​​ чтобы проверка прошла​: в 9 колонке​

​ удаляется строка целиком.​​ макрос два раза,​
​спасибо Вам ну​: Теперь, да. Только​LightZ​End If​Sub io()​ c).End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete​
​ i = x​ то, что надо​

​ могу подкинуть пример.​​ проблемами. Он удаляет​ Object ‘переменная цикла​

Как удалить пустые строки? Программное удаление пустых строк макросом VBA

Часто встречающейся операцией при работе с таблицами Excel является удаление пустых строк. Существуют как стандартные средства при помощи которых можно удалить пустые строки, так и нестандартные, с использованием программирования на Visual Basic for Application.

Стандартные способы удаления пустых строк

Удаление вручную

Самый распространенный, но при этом самый примитивный способ, при котором необходимо навести курсор на номер пустой строки и кликнуть по нему левой кнопкой мыши. Вся строка выделится. Если нажать и удерживать клавишу Ctrl на клавиатуре, можно выделить несколько строк. После этого их можно удалить все разом, кликнув правой кнопкой мыши в выделенной области и выбрав команду «Удалить» в контекстном меню. Этот способ целесообразно использовать когда необходимо удалить несколько строк.

Удаление при помощи сортировки

Когда предстроит удалить достаточно много строк, искать их зрительно не очень удобно. В этом случае можно использовать сортировку по возрастанию либо убыванию для того чтобы пустые строки сгруппировались и после этого удалить их, выделив сразу весь диапазон. При этом очередность строк нарушается и для того, чтобы ее затем восстановить, необходимо предварительно в спомогательном столбце ввести нумерацию всех строк для того чтобы воостановить первоначальную очередность после удаления пустых строк.

Удаление при помощи выделения группы ячеек

Для того чтобы удалить пустые строки в Excel 2007 и 2010 можно использовать возможностью выделения группы ячеек. Для этого выделяем столбец, содержащий пустые ячейки, после чего находим на ленте Excel вкладку «Главная», в группе «Редактирование» выбираем кнопку «Найти и выделить» и выбираем пункт «Выделение группы ячеек». В появившемся диалоговом окне «Выделение группы ячеек» включаем опцию «Пустые ячейки» и нажимаем кнопку ОК. В предварительно выделенном столбце будут выделены все пустые ячейки. Остается кликнуть правой кнопкой мыши в любом месте выделенного поля и выбрать пункт «Удалить. » в контекстном меню, а в появившемся диалоговом окне «Удаление ячеек» выбрать пункт «Строка» и нажать ОК. При этом, строго говоря, удаляются не пустые строки, а строки, содержащие пустые ячейки в предварительно выделенном столбце.

Нестандартные методы удаления пустых строк

Программное удаление макросом VBA

Стандартные способы просты в использовании, но имеют свои минусы. Если ни один из стандартных способов не подходит, то для решения этой задачи можно использовать процедуру, написанную на языке VBA, которая удалит все пустые строки в используемом диапазоне листа.

Для того, чтобы перенести этот программный код на свой компьютер, наведите курсор мыши на поле с программным кодом , нажмите на одну из двух кнопкок в правом верхнем углу этого поля, скопируйте программный код и вставьте его в модуль проекта на своем компьютере (подробнее о том, как сохранить программный код макроса).

Автоматическое удаление с использованием надстройки

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

Пользователь на свой выбор может удалять либо скрывать пустые строки. Может удалять либо скрывать строки содержащие либо не содержащие заданный текст, при этом на свой выбор учитывать либо не учитывать регистр. Возможен одновременный поиск сразу нескольких значений, введенных через точку с запятой (;). Пользователь также может на свое усмотрение расширять область действия макроса и ограничивать его, задавая номера первой и последней строки. Кроме того, надстройка освобождает пользователя от поиска нужного макроса, так как позволяет вызывать диалоговое окно прямо из панели инструментов Excel.

Еще одна надстройка, позволяющая скрывать и удалять строки и столбцы, в зависимости от значения ячейки и заданного условия, а также удаляющая пустые ячейки и ячейки с заданными значениями со сдвигом вверх и со сдвигом влево.

Похожие статьи

Ссылка на основную публикацию
Похожие публикации
Adblock
detector