hk1209 Пользователь Сообщений: 271 |
#1 30.01.2014 11:39:19 всем доброго времени суток
спасибо за потраченное драгоценное время Изменено: hk1209 — 30.01.2014 20:05:32 |
||
Hugo Пользователь Сообщений: 23249 |
Чтож Вы с строкой сравниваете дату? Или там тоже строка, а не дата? |
hk1209 Пользователь Сообщений: 271 |
|
wowick Пользователь Сообщений: 972 |
А сравниваете вы ее с ТЕКСТОМ «20.11.2013»… В экселе, как и во-многих других средах программирования в кавычках подразумевает текстовый формат. Если автоматизировать бардак, то получится автоматизированный бардак. |
Sanja Пользователь Сообщений: 14838 |
#5 30.01.2014 11:51:07 Попробуйте так
Согласие есть продукт при полном непротивлении сторон. |
||
Hugo Пользователь Сообщений: 23249 |
То что там дата — это ещё не факт. Видали мы всяких дат… Пока не докажете — не поверю |
hk1209 Пользователь Сообщений: 271 |
#7 30.01.2014 12:32:37 Sanja спасибо за подсказку
долго выполняется |
||
Sanja Пользователь Сообщений: 14838 |
#8 30.01.2014 12:44:02 Для ускорения выполнения кода отключите автоматический пересчет:
в конце процедуры включить:
так определяется
номер последней строки с данными в 9-м столбце:
Изменено: Sanja — 30.01.2014 12:45:13 Согласие есть продукт при полном непротивлении сторон. |
||||||
Hugo Пользователь Сообщений: 23249 |
4. Обрабатывать массивы, а не ячейки — на листе только удалять строки, да и тут можно это делать один раз сразу с группой. P.S.Упустил — Dim rw As Date — это ошибка! Изменено: Hugo — 30.01.2014 12:57:32 |
hk1209 Пользователь Сообщений: 271 |
#10 30.01.2014 13:52:19 Sanja & Hugo спасибо за подсказку и потраченное драгоценное время
Знаю что там не правильно, но не могу понять где именно Изменено: hk1209 — 30.01.2014 20:06:26 |
||
The_Prist Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
#11 30.01.2014 14:02:46 Cells(Rows.Count, 9).End(xlUp).Row < CDate(«20.11.2013») Hugo совсем иное советовал..
И уже в цикле:
С массивами чуть сложнее в понимании, но на Вашем примере было бы так:
P.S. И оформляйте коды тегами. Значок «<…>» среди кнопок вверху при создании сообщения. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
Hugo Пользователь Сообщений: 23249 |
Супербыстрое удаление строк от ZVI есть тут: http://www.sql.ru/forum/actualthread.aspx?tid=722758 Можно использовать и в этой задаче. |
hk1209 Пользователь Сообщений: 271 |
#13 30.01.2014 14:24:29 The_Prist спасибо за потраченное драгоценное время и советы (включая код) |
Содержание
- VBA Delete Entire Row or Column
- Delete Entire Row or Column
- Delete Multiple Rows or Columns
- Delete Blank / Empty Rows
- Delete Row if Cell is Blank
- Delete Row Based on Cell Value
- More Delete Row and Column Examples
- VBA Coding Made Easy
- Delete Duplicate Rows
- Delete Table Rows
- Delete Filtered Rows
- Delete Rows in Range
- Delete Selected Rows
- Delete Last Row
- Delete Columns by Number
- VBA Code Examples Add-in
- Пример макроса для вставки и удаления строк или столбцов на нескольких листах в Excel
- Аннотация
- Дополнительная информация
- Пример макроса с использованием цикла для вставки строк на несколько листов
- Пример макроса для выбора столбца и вставки нового столбца
- Как в excel удалить нужную строку через VBA
- 7 ответов
- Delete a row in Excel VBA
- 4 Answers 4
- Excel vba удалить строку
- удалить строку целиком (VBA)
- Удаление строк VBA
- Как на VBA отловить удаление строки Excel?
- Удаление строки с определенным порядковым номером по всей книге excel
- Удаление определенных строк в Excel
- VBA удаление перекрывающихся строк (Макросы/Sub)
VBA Delete Entire Row or Column
In this Article
This tutorial will demonstrate different ways to delete rows and columns in Excel using VBA.
Delete Entire Row or Column
To delete an entire row in VBA use this line of code:
Notice we use the Delete method to delete a row.
Instead of referencing the Rows Object, you can reference rows based on their Range Object with EntireRow:
Similarly to delete an entire column, use these lines of code:
Delete Multiple Rows or Columns
Using the same logic, you can also delete multiple rows at once:
Notice here we reference the specific row and column numbers / letters surrounded by quotations.
Of course, you can also reference the EntireRow of a range:
Note: The examples below only demonstrate deleting rows, however as you can see above, the syntax is virtually identically to delete columns.
Delete Blank / Empty Rows
Delete Row if Cell is Blank
Delete Row Based on Cell Value
More Delete Row and Column Examples
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Delete Duplicate Rows
This code will delete all duplicate rows in a range:
Notice we set Columns:=2. This tells VBA to check both the first two columns of data when considering if rows are duplicates. A duplicate is only found when both columns have duplicate values.
If we had set this to 1, only the first row would’ve been checked for duplicate values.
Delete Table Rows
This code will delete the second row in a Table by referencing ListObjects.
Delete Filtered Rows
To delete only rows that are visible after filtering:
Delete Rows in Range
This code will delete all rows in range:
Delete Selected Rows
This code will delete all selected rows:
Delete Last Row
This will delete the last used row in column B:
By changing 2 to 1, you can delete the last used row in column A, etc.:
Delete Columns by Number
To delete a column by it’s number, use a code like this:
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
Источник
Пример макроса для вставки и удаления строк или столбцов на нескольких листах в Excel
Аннотация
Эта статья содержит пример макроса Microsoft Visual Basic для приложений (вспомогательная процедура), который можно использовать для вставки или удаления строк или столбцов на нескольких листах в Microsoft Excel.
Дополнительная информация
Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Инженеры службы поддержки Майкрософт могут объяснить функциональность отдельной процедуры. обязаны изменять примеры для реализации дополнительных возможностей или удовлетворения требований конкретных пользователей. Чтобы вставить или удалить строки или столбцы на нескольких листах, используйте команду For Each. Next statement для циклического прохода по всем необходимым листам или выберете строки или столбцы перед выполнением вставки или удаления.
Приведенные ниже примеры макросов работают только с непрерывным диапазоном столбцов или строк.
Пример макроса с использованием цикла для вставки строк на несколько листов
Пример макроса для выбора столбца и вставки нового столбца
Следующий пример макроса выбирает весь столбец перед вставкой новых столбцов:
Источник
Как в excel удалить нужную строку через VBA
7 ответов
Конечно можно. Ставишь на запись макрос, выполняешь какие нужно действия(удаление строки), останавливаешь запись. Открываешь Макросы->Изменить и смотришь какой код получился.
Будет примерно так:
Вообще-то, при удалении строки необходимо уменьшать счётчик, ибо в противном случае могут остаться строки, содержащие «-» (разумеется, если «-» содержатся в смежных ячейках) или начать удаление снизу вверх, т.е.
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
Источник
Delete a row in Excel VBA
I have this piece of code which finds the excel row of an item from a list and deletes the items from a list. What I want. is to delete the Excel row as well.
The code is here
Where I added ws.Range(Rand,1).EntireRow.Delete is where I want to delete the entire row but I don’t know how to do it. What I want. if it finds the same value in a cell like in some selected item of my list to be able to remove both the entire row in excel and the item from the listbox. It works to remove the item from the listbox but I don’t know how to remove the row as well
4 Answers 4
Chris Nielsen’s solution is simple and will work well. A slightly shorter option would be.
. note there is no need to specify a Shift when deleting a row as, by definition, it’s not possible to shift left
Incidentally, my preferred method for deleting rows is to use.
. in the initial loop. I then use a Sort function to push these rows to the bottom of the data. The main reason for this is because deleting single rows can be a very slow procedure (if you are deleting >100). It also ensures nothing gets missed as per Robert Ilbrink’s comment
You can learn the code for sorting by recording a macro and reducing the code as demonstrated in this expert Excel video. I have a suspicion that the neatest method (Range(«A1:Z10»).Sort Key1:=Range(«A1»), Order1:=xlSortAscending/Descending, Header:=xlYes/No) can only be discovered on pre-2007 versions of Excel. but you can always reduce the 2007/2010 equivalent code
Couple more points. if your list is not already sorted by a column and you wish to retain the order, you can stick the row number ‘Rand’ in a spare column to the right of each row as you loop through. You would then sort by that comment and eliminate it
If your data rows contain formatting, you may wish to find the end of the new data range and delete the rows that you cleared earlier. That’s to keep the file size down. Note that a single large delete at the end of the procedure will not impair your code’s performance in the same way that deleting single rows does
Источник
Excel vba удалить строку
удалить строку целиком (VBA)
Смотрите также -5 -7 Is Nothing Rows(Columns(1).Find(«*итого*»).Row).Delete
«Итого по корреспондирующемуА каким макросом
нравится, в модуле отследить удаление строки
(имея в виду это обсуждалось (в проверю все ячейки
Dim iColumns AsDim j As
«» Then: при удалении строки Rows(rw).Delete с группой. т.ч. и у строки на empty. Integer Longi = i + 1 сдвигаются, поэтому циклС массивами чуть5. Как я Rows(rw).Delete ‘номер 9
: всем доброго времени: Макрос удаляет вbobosafedОчень надо! данного макроса? кнопку (Лист или
Как повеситься на Лист), и запустил буржуев). Ни в А вот какWith Sheets(«Недостача»).Range(«A2»).CurrentRegionDim i Asarr(i, 1) = лучше писать так:
сложнее в понимании, уже сказал - — 9-й столбец
суток том числе и: Огромное преогромное спасибо,Helen_fireИ еще. Как UserForm) этот код: событие удаления строки на главное окно
одном из топиков с удалением выкручиваться?
iColumns = .Columns.Count Long elemFor .Cells(Rows.Count, 1).End(xlUp).Row
но на Вашем использовать переменную, аHugoизвините, что вас строки, у которых все получилось. : Все очень просто. сделать чтобы перед
Private Sub CommandButton1_Click() я не нашел Книги. Добавил строчку.
решения не найдено. Есть идеи гарантированно
ReDim arr2(1 To
Dim ii AsEnd If To 2 Step примере было бы не 100000 раз: То что там беспокоил в столбце «A»bobosafed Можно взять для, выполнением 1-го макроса
Dim wsh as нигде.Если сможете найти Сходил в Журнал, Мне лично эта
установить факт события? .Rows.Count, 1 To LongNext
-1 так: делать CDate(«20.11.2013″ дата — это
у меня такая пустые ячейки.
: Немного недоглядел - в принципе «итого». (на удаление строки) Worksheet For Each
буду благодарен за откинул строки, связанные
задача, в общем-то,Serg61 iColumns)Dim iColumns As.ClearContents
.
Private Sub Test(). ещё не факт. проблема200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub Макрос1()У меня из Это будет выглядеть выскакивало окно предупреждения wsh In Thisworkbook.Worksheets
информацию!По мотивам приведённой с активацией меню, не нужна, но: А почему неarr1 = .Value Integer
.Parent.Range(«C1»).Resize(i) = arr()Next Application.ScreenUpdating = False6. Зачем непременно
Видали мы всякихесть таблица иDim arr(), lr
строки удаляется слово так: с определенным текстом wsh.Rows(13).Delete Next End Comanche ссылки http://www.experts-exchange.com/Appl. _20783307.html
тултипов под кнопками я уже ‘завёлся’. защита листа?For j =
With Sheets(1).Range(«A2»).CurrentRegionEnd WithLightZ Dim rw As удалять строки? Может дат. Пока не в 9-й колонке As Long, i «итоги», а мнеRows(Columns(1).find(«*итого*»).row).Delete Shift:=xlUpИли прописатьКазанский Sub вижу наиболее пока инструментальной панели и Очень интересно былоПара кнопок на 2 To .Rows.CountiColumns = .Columns.Countikki
: удалять строки нужно
Long, dDt As
просто переложить данные, докажете — не сущест. даты
As Long, j надо чтоб удалена
удаление каждого по: Нужно запоминать содержимоеКазанский приемлемое решение:
прочую ерунду. И бы ‘родить’ решение.
понели (своей) добавить
If arr1(j, 3)ReDim arr2(1 To: разные способы - снизу вверх
Date, avItems, lLastR затереть ненужное? поверю
больше 100 тыс. As Long была вся строка, отдельности: удаляемых строк. Можно
: Кнопку где? НаDim ExcelSize as что же осталось? Но пока у строку и удалить = «» Then .Rows.Count, 1 To для разных целей.
Daulet As Long lLastRP.S.Упустил — Dimhk1209 строк
Application.ScreenUpdating = False у которойDim mas dim на отдельном скрытом
листе, на форме, Integer ‘ count
— управление скроллом меня ничего красивого строку.i = i + 1
iColumns)использование Delete медленно: ikki, LightZ Спасибо! = Cells(Rows.Count, 9).End(xlUp).Row rw As Date
: Sanja спасибо запроблема такая: надо
lr = Columns(«A:B»).Find(What:=»*»,
в колонке А ind mas=array(«итого по листе, тогда получится на тулбаре, на
Удаление строк VBA
of real rows да repaint-ы. Есть
не выходит. МанипуляцииПричем в этомFor ii =arr1 = .Value в т.ч. потому,
AKSENOV 048
If lLastR
— это ошибка!
подсказку удалить строку целиком, LookIn:=xlFormulas, LookAt:= _
написано «Итоги» ? счету*»,»итого по отделу*»,
сохранить формулы и
рабочем столе, на
Dim SomeArray as
ещё postmessage-строки, но
с Spy++ ничего
случаее не надо 1 To iColumnsFor j = что Ex корректирует
: вот такой вариантP.S. И оформляйтеhk1209
в таблице примерно
если дата меньше
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious,Helen_fire и т.д.) for
форматы. заборе вашей дачи?
Variant ‘ for они повторяются многократно,
пока не дали.
ломать голову какую
arr2(i, ii) =
1 To .Rows.Count все формулы, форматыSub io() коды тегами. Значок: Sanja & Hugo
100 тыс строк 20.11.2013 г. и MatchCase:=False _
: вообще-то этим кодом ind =1 toIf MsgBox(«Строка «В любом случае storeing last user
так что это
Перерыл весь Инет строку пользователь добавляет. arr1(j, ii)If arr1(j, 3) и прочие свойстваSheets(«Недостача»).UsedRange.Offset(1).Columns(«C»).SpecialCells(xlBlanks).Rows.Delete «» среди кнопок
спасибо за подсказкуиспользую следующий код: поднимать на вверх, SearchFormat:=False).Row удаляется строка целиком. кол-во пунктов удаления & n &
кнопке надо будет Selection Private Sub не то, что — тоже без
daniel default
Next
<> «» Then ячеек — примечания,
End Sub вверху при создании
и потраченное драгоценноеPrivate Sub Test()написал следующий код,
arr() = Range(«A1:A»Gopronotmore
Rows(Columns(1).find(mas(ind-1)).row).Delete Shift:=xlUp Next » будет УДАЛЕНА
назначить этот код.
Worksheet_Change(ByVal Target As ищем.
толку.
: В этом случае
End If
i = i + 1
УФ, .
правде если пустых сообщения. время
Application.ScreenUpdating = False но неработает, прошу & lr).Value: Добрый день формучане!bobosafed во всех листах.»nivybuct
Range) ‘for additionsПолучается, что выбор2SlavaRus: вы пишите: придётся контролировать действияNextFor ii =вариант с массивом ячеек не будет,HugoHugo переписал код Dim rw As
вашей подсказкиFor i = Вопрос вот мучаюсь
: По первой формуле & vbLf &
: Но удаляется только If UsedRange.Rows.Count >
пункта меню отловить ‘Если да, то юзера и вSheets(«Недостача»).Range(«A2:C» & Cells(Rows.Count, 1 To iColumns
действительно много быстрее,
появиться ошибка. тогда: Супербыстрое удаление строк по вашим замечаниям, Date For rwPrivate Sub Test() 1 To UBound(arr,
с таблицей в получается, но строчки _ «Продолжить?», vbExclamation строка №13? ExcelSize Then DoSomethingInAddCase(UsedRange.Rows.Count можно, но его
проблему можно решить!’. других, не интересующих 1).End(xlUp).Row).ClearContentsarr2(i, ii) = но с формулами
можно добавить обработчик
от ZVI есть
к сожалению не = 100000 To
Application.ScreenUpdating = False 1)
которой много значений. с разными текстами
+ vbDefaultButton2 +mc-black
— ExcelSize) ExcelSize
нажатие никаких мессаджей
КАК? Поделитесь. меня зонах, аSheets(«Недостача»).Range(«A2»).Resize(i, iColumns).Value =
arr1(j, ii)
и форматами придется ошибок.
тут: работает
1 Step -1
Dim rw AsIf (IsNumeric(arr(i, 1))
Задача вот в за один клик
vbYesNo) = vbNo
: Private Sub CommandButton1_Click()
= UsedRange.Rows.Count ‘for
не посылает. НичегоИтак, что имеем:
это ненужный код, arr2
Next
распрощаться. а ужDauletМожно использовать иPrivate Sub Test() If Cells(rw, 9) Date For rw = False) Or чем. Есть список не удаляются. Например, Then Exit Sub Dim wsh As deletions ElseIf UsedRange.Rows.Count
удивительного — просто1. Удалить из время. Или яEnd WithEnd If если на этот: AKSENOV 048 Спасибо
в этой задаче. Dim rw As
Как на VBA отловить удаление строки Excel?
субсчету» надо запускать ситуация: на листе2 строки», «Ввести число», End If End можем отлавливать (а на ‘свои’. если юэаем Excel
тогда удаляет иSheets(1).Range(«A2»).Resize(i, iColumns).Value = результат может быть что надо НЕ даты
xlCalculationManual Application.ScreenUpdating =есть ли у Rows(rw).Delete ‘номер 9For j = со знаком - макрос два раза, таблица связана с 13) For Each Sub Private Sub по-другому и никак),3. Через BeforeRightClick
XP, то можно ругается на строку arr2
катастрофическим :) пустые ячейки удалять)hk1209 False For rw
вас какие-то идеи — 9-й столбец i + 1Как написать скрипт
чтобы удалить эти таблицей листа1. На wsh In ThisWorkbook.Worksheets Worksheet_SelectionChange(ByVal Target As то получится, что запретить popup-меню на защитить листь от (Ошибка 1004)End With
KuklP простите.: The_Prist спасибо за = ActiveSheet.UsedRange.Row + для оптимизации данного Next Application.ScreenUpdating = To UBound(arr, 1) который при просмотре
строки листе3 — не wsh.Rows(n).Delete Next End Range) StoreTargetInSomeArray(Target) ‘ будем запрещать нажатие листе.
вставки строк, а->Sheets(«Недостача»).Range(«A2»).Resize(i, iColumns).Value =KuklP: Богдан, это с
SpecialCells(xlConstants, 1) потраченное драгоценное время
ActiveSheet.UsedRange.Rows.Count — 1 кода? True End SubспасибоIf (IsNumeric(arr(j, 1)) диапазона удалял строкиВо второй формуле
связанная с другими Sub
I don’t now
пункта меню. А
4. Манипуляции с
остальное как бы
arr2: Да хоть Do одним массивом:-)LightZ и советы (включая To FirstRow Stepкаждый раз кол-во за потраченное драгоценное = True) And которые в сумме — макрос ругается листами информация.nivybuct how to realize тогда возникает резонный защитой листа. не защищать. спасибо Вам ну loop. Там вLightZ: ABC, если Вы код) -1 If Cells(Rows.Count, строк разные бывает
время (IsEmpty(arr(j, 1)) = дают 0 . на строку
Нужны два макроса:
: Я плохо сформулировал correctly analog of вопрос: на фига
5. Манипуляции сdaniel default
туда добавлю Error любом случае один: KukLP
будете удалять строкиHugo — спасибо
9).End(xlUp).Row
Удаление строки с определенным порядковым номером по всей книге excel
Daulet быстрей), тогда да.ikki скорость 00:00 сек,: Здравствуйте!прошу вашей помощиSanja
в данном случаеExit For квитовать одну строку меня такая строка с сохранением целостности строку.
порядковым номером ещё ссылка, где мой взгляд, тут или удаления строки?: LightZ охо прекрасноKuklPИсходил из скорости
а выполнение вышеуказанныхХочу удалить строкспасибо за понимание
: Для ускорения выполнения к дате, аEnd If +10 с тремя работает.из индекса вычитается
таблиц (форматирование, пересчетВыделяю еепо всей книге мне на этот нет. Красивым былоЕсли да, то
спасибо Вам!: Теперь, да. Только выполнения макроса, т.к. кодов так и не пустых ячеекThe_Prist
кода отключите автоматический вернее справа можетEnd If
строками -3, -6, 1, поскольку нумерация формул), но только
, запускаю нужный макрос.excel? же вопрос отвечала бы решение с проблему можно решить!daniel default и для этого примера нет и не дождался :( столбце C, или: Cells(Rows.Count, 9).End(xlUp).Row
Удаление определенных строк в Excel
With Sheets(«Недостача») 0. Как минимум номер последней строки
датаOn Error Resume дают одно значение, этот момент надоэта музыка будет вечной?
mc-black Next End Sub: Да, весьма толково — непонятно. Как
решение красивее?
листа не годится): LightZ Ваш последний но скорее всегоDim arr()For d = под конец ошибку
с данными вwowick Next
просто нужно затереть учитывать.скиньте скрин ошибки. :D: Private Sub CommandButton1_Click()nivybuct ответила, ничего не уже говорил, Spy++
daniel defaultIgorTr код массивный замечателен, не оригинал, дляDim i As 2 To .Cells(Rows.Count,
получите. 9-м столбце:: А сравниваете выRange(«A1»).Resize(UBound(arr, 1), 1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete повторы грубо говоряА насчет первогоbobosafed
Dim wsh As: Большое спасибо за скажешь.
мне не помог.
: http://www.relib.com/forums/topic.asp?id=742255: ИМХО больной вопрос.
но чуть исправил которого делается макрос Long 1).End(xlUp).RowHugo совсем иноеCells(Rows.Count, 9).End(xlUp).Row ее с ТЕКСТОМOn Error GoTo есть 3 числа варианта:я просто скидывала: Помогите чайнику! Я Worksheet, n As быстрый ответ! НоСклоняюсь я к Я отрубил в
http://www.relib.com/forums/topic.asp?id=798944 Красиво сделать ЭТОDim arr1() :)With Sheets(1).Range(«C1:C» &If .Cells(d, 3).Value советовал..
Hugo «20.11.2013». В экселе,
0 3 5 7 вариант строки, а
только учусь Long n = мне нужно создать
тому, что это, нём фиксацию сообщений
http://www.relib.com/forums/topic.asp?id=747125 мне пока неDim arr2()LightZ Cells(Rows.Count, 3).End(xlUp).Row) <> «» Then
До начала цикла:: 4. Обрабатывать массивы,
как и во-многихApplication.ScreenUpdating = True и есть 3
VBA удаление перекрывающихся строк (Макросы/Sub)
так его тожеНадо в таблице Selection.Row For Each кнопку, которая бы наверное, наилучший вариант
типа ‘Mouse’ иhttp://www.experts-exchange.com/Applications/MS_Office/Excel/Q_20783307.html удалось :-(Dim j As: вот так будетReDim arr(1 To.Rows(d).EntireRow.Delete
dim dDt as а не ячейки других средах программированияMsgBox «Готово!», vbInformation числа -3 -5
надо было ставить
Excel удалить строки wsh In ThisWorkbook.Worksheets удаляла выделенную строку решения задачи. ‘Keyboard’ (чтоб неhttp://www.excel-center.com/mailing/137701h.htmdaniel default Long лучше, учитывая все .Cells.Count, 1 ToEnd If
Date dDt = — на листе в кавычках подразумеваетEnd Sub -7 если есть в цикл, и в графе А wsh.Rows(n).Delete Next End по всей книге.Там осталось несколько таким здоровым былdaniel default: Ну хорошо, пустьDim i As данные, с двумя 1)Next
CDate(«20.11.2013»)И уже в только удалять строки, текстовый формат.Gopronotmore совпадение, то удалить потом использовать FindNext.
в которых указаны
Submc-black неясностей. Если решишь журнал), затем настроил
: 2IgorT: да уж,
не слишком красиво. Long
массивами:For Each elem
End With
цикле: да и тут
Sanja: Да вы просто строки где есть
А лучше сделайте тексты :nivybuct: Дежурный экстрасенс вышел
(или уже знаешь
на фиксацию сообщений
‘больной вопрос’. Я С вставкой ещёDim ii As
Dim arr1() In .ValueEnd SubIf Cells(rw, 9)
можно это делать: Попробуйте так бог! Спасибо огромное
числа 3 5 цикл еще короче
»Итого по счету»,: Спасибо! То что
покурить.
как), напиши, пожалуйста,
как окна, так
предыдущим сообщением перечислил
куда ни шло:
Long
Dim arr2()If elem <>
ikki
нужно.Кнопку поместить где сюда.По событию CHANGE и его ‘детей’
Источник
In this Article
- Delete Entire Row or Column
- Delete Multiple Rows or Columns
- Delete Blank / Empty Rows
- Delete Row if Cell is Blank
- Delete Row Based on Cell Value
- More Delete Row and Column Examples
- Delete Duplicate Rows
- Delete Table Rows
- Delete Filtered Rows
- Delete Rows in Range
- Delete Selected Rows
- Delete Last Row
- Delete Columns by Number
This tutorial will demonstrate different ways to delete rows and columns in Excel using VBA.
Delete Entire Row or Column
To delete an entire row in VBA use this line of code:
Rows(1).Delete
Notice we use the Delete method to delete a row.
Instead of referencing the Rows Object, you can reference rows based on their Range Object with EntireRow:
Range("a1").EntireRow.Delete
Similarly to delete an entire column, use these lines of code:
Columns(1).Delete
Range("a1").EntireColumn.Delete
Delete Multiple Rows or Columns
Using the same logic, you can also delete multiple rows at once:
Rows("1:3").Delete
or columns:
Columns("A:C").Delete
Notice here we reference the specific row and column numbers / letters surrounded by quotations.
Of course, you can also reference the EntireRow of a range:
Range("a1:a10").EntireRow.Delete
Note: The examples below only demonstrate deleting rows, however as you can see above, the syntax is virtually identically to delete columns.
Delete Blank / Empty Rows
This example will delete a row if the entire row is blank:
Sub DeleteRows_EntireRowBlank()
Dim cell As Range
For Each cell In Range("b2:b20")
If Application.WorksheetFunction.CountA(cell.EntireRow) = 0 Then
cell.EntireRow.Delete
End If
Next cell
End Sub
It makes use of the Excel worksheet function: COUNTA.
Delete Row if Cell is Blank
This will delete a row if specific column in that row is blank (in this case column B):
Range("b3:b20").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Delete Row Based on Cell Value
This will loop through a range, and delete rows if a certain cell value in that row says “delete”.
Sub DeleteRowswithSpecificValue()
Dim cell As Range
For Each cell In Range("b2:b20")
If cell.Value = "delete" Then
cell.EntireRow.Delete
End If
Next cell
End Sub
More Delete Row and Column Examples
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More
Delete Duplicate Rows
This code will delete all duplicate rows in a range:
Range("b2:c100").RemoveDuplicates Columns:=2
Notice we set Columns:=2. This tells VBA to check both the first two columns of data when considering if rows are duplicates. A duplicate is only found when both columns have duplicate values.
If we had set this to 1, only the first row would’ve been checked for duplicate values.
Delete Table Rows
This code will delete the second row in a Table by referencing ListObjects.
ThisWorkbook.Sheets("Sheet1").ListObjects("list1").ListRows(2).Delete
Delete Filtered Rows
To delete only rows that are visible after filtering:
Range("b3:b20").SpecialCells(xlCellTypeVisible).EntireRow.Delete
VBA Programming | Code Generator does work for you!
Delete Rows in Range
This code will delete all rows in range:
Range("a1:a10").EntireRow.Delete
Delete Selected Rows
This code will delete all selected rows:
Selection.EntireRow.Delete
Delete Last Row
This will delete the last used row in column B:
Cells(Rows.Count, 2).End(xlUp).EntireRow.Delete
By changing 2 to 1, you can delete the last used row in column A, etc.:
Cells(Rows.Count, 1).End(xlUp).EntireRow.Delete
Delete Columns by Number
To delete a column by it’s number, use a code like this:
Columns (2).Delete
Удаление пустых строк с помощью кода VBA из всего задействованного диапазона рабочего листа Excel и из отдельного заданного диапазона.
Главный секрет удаления пустых строк кодом VBA Excel – это построчный просмотр диапазона или отдельного столбца снизу вверх, что исключает возможность при удалении найденных пустых строк получить бесконечный цикл и зависание программы.
Удаление пустых строк в используемом диапазоне
Рассмотрим удаление пустых строк из всего используемого диапазона на рабочем листе. Это может быть как таблица, так и любые наборы данных и произвольные записи, внутри которых присутствуют пустые строки, от которых надо избавиться.
Определить границы используемого диапазона на рабочем листе из кода VBA Excel нам поможет последняя ячейка используемого диапазона: Cells.SpecialCells(xlLastCell)
.
Самый простой код удаления пустых строк
Сначала определяем номер строки последней ячейки задействованного на рабочем листе диапазона. Затем, с этой строки начинаем построчный просмотр используемого диапазона снизу вверх с поиском и удалением пустых строк.
Пример кода VBA Excel для активного листа:
Sub Primer1() Dim n As Long, i As Long ‘Определяем номер строки последней ячейки ‘используемого диапазона на рабочем листе n = Cells.SpecialCells(xlLastCell).Row ‘Ищем и удаляем пустые строки For i = n To 1 Step —1 If Rows(i).Text = «» Then Rows(i).Delete Next End Sub |
То же самое, но с указанием книги и рабочего листа:
Sub Primer2() Dim n As Long, i As Long With ThisWorkbook.Worksheets(«Лист1») n = .Cells.SpecialCells(xlLastCell).Row For i = n To 1 Step —1 If .Rows(i).Text = «» Then .Rows(i).Delete Next End With End Sub |
Программа определения времени выполнения макроса показала, что этот код отработал в диапазоне из 3000 строк за 17,5 секунд.
Улучшенный код удаления пустых строк
Предыдущий код VBA Excel анализирует на наличие текста каждую строку по всей длине в пределах рабочего листа. Эта процедура проверяет каждую строку по длине только в переделах используемого диапазона:
Sub Primer3() Dim n As Long, i As Long, myRange As Range ‘Присваиваем объектной переменной ссылку на диапазон от первой ячейки ‘рабочего листа до последней ячейки используемого диапазона Set myRange = Range(Range(«A1»), Cells.SpecialCells(xlLastCell)) With myRange n = .Rows.Count For i = n To 1 Step —1 If .Rows(i).Text = «» Then .Rows(i).Delete Next End With End Sub |
Программа определения времени выполнения макроса показала, что этот код отработал в диапазоне из 3000 строк за 13,3 секунды.
Удаление строк по пустым ячейкам
Иногда может появиться необходимость удалить не только полностью пустые строки, но и строки с пустыми ячейками в определенном столбце. Тогда следует действовать так:
Sub Primer4() Dim n As Long, i As Long n = Cells.SpecialCells(xlLastCell).Row For i = n To 1 Step —1 If Cells(i, 1).Text = «» Then Rows(i).Delete Next End Sub |
или так:
Sub Primer5() Dim n As Long, i As Long, myRange As Range Set myRange = Range(Range(«A1»), Cells.SpecialCells(xlLastCell)) With myRange n = .Rows.Count For i = n To 1 Step —1 If .Cells(i, 1).Text = «» Then .Rows(i).Delete Next End With End Sub |
В этих примерах поиск пустой ячейки производится в первом столбце: Cells(i, 1)
.
Удаление пустых строк в заданном диапазоне
Процедуры VBA Excel для удаления пустых строк из заданного диапазона рассмотрим на примере объекта Selection
, который можно заменить на любой диапазон, указанный явно.
Удаление полностью пустых строк в пределах заданного диапазона:
Sub Primer6() Dim n As Long, i As Long With Selection n = .Rows.Count For i = n To 1 Step —1 If .Rows(i).Text = «» Then .Rows(i).Delete Next End With End Sub |
Удаление строк по пустым ячейкам в одном из столбцов:
Sub Primer7() Dim n As Long, i As Long With Selection n = .Rows.Count For i = n To 1 Step —1 If .Cells(i, 1).Text = «» Then .Rows(i).Delete Next End With End Sub |
Добрый день.
Подскажите пожалуйста, задача следующая:
Необходимо пройтись по всем рядам таблицы.
Если в колонке А стоит «-» и в колонке В стоит «-«, то данную строку необходимо удалить.
Можно ли реализовать данную задачу через макросы?
Спасибо.
7 ответов
37K
06 марта 2013 года
freets
97 / / 15.10.2010
Конечно можно. Ставишь на запись макрос, выполняешь какие нужно действия(удаление строки), останавливаешь запись. Открываешь Макросы->Изменить и смотришь какой код получился.
Будет примерно так:
Код:
Rows(«1:1»).Select //выделяем первую строку
Selection.Delete Shift:=xlUp //удаляем со сдвигом вверх
только добавь нужное условие и всё.
88K
06 марта 2013 года
Vanderlog
4 / / 06.03.2013
А как правильно организовать перебор всех элементов, и, собственно, если не трудно то условие скажите как задать?
37K
06 марта 2013 года
freets
97 / / 15.10.2010
Код:
Sub Macros()
Dim rw As Long
For rw = 1 To 100
If Cells(rw, «A»).Value = «-« And Cells(rw, «B»).Value = «-« Then
Rows(rw & «:» & rw).Delete Shift:=xlUp
End If
Next rw
End Sub
88K
06 марта 2013 года
Vanderlog
4 / / 06.03.2013
Работает, но почему-то за один проход не справляется. Причем строк меньше 100. 10 строк удаляет за 4 прохода. Что может останавливать скрипт?
275
06 марта 2013 года
pashulka
985 / / 19.09.2004
Вообще-то, при удалении строки необходимо уменьшать счётчик, ибо в противном случае могут остаться строки, содержащие «-» (разумеется, если «-» содержатся в смежных ячейках) или начать удаление снизу вверх, т.е.
Код:
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
End Sub
88K
06 марта 2013 года
Vanderlog
4 / / 06.03.2013
Все верно, при переборе снизу вверх работает корректно. Спасибо всем!
275
22 марта 2013 года
pashulka
985 / / 19.09.2004
Чуть не забыл если в дальнейшем потребуется проверять наличие «-» в большем количестве столбцов, чем сейчас, то вместо увеличения And или дополнительного цикла по столбцам, можно программно воспользоваться стандартной функцией рабочего листа =СЧЁТЕСЛИ() (см. листинг)
Код:
Private Sub Test2()
Dim rw&, ws As Worksheet
Set ws = ActiveSheet
With Application
.ScreenUpdating = False
For rw = 100 To 1 Step -1
If .CountIf(ws.Cells(rw, «A»).Resize(, 2), «-«) = 2 Then ws.Rows(rw).Delete
Next
.ScreenUpdating = True
End With
End Sub
P.S. Разумеется номер последней заполненной строки мы можем определять программно.