Удаление строк с пустыми ячейками
Rioran
Дата: Вторник, 24.06.2014, 21:28 |
Сообщение № 1
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация:
290
±
Замечаний:
0% ±
Excel 2013
Всем привет. Искал вариант попроще. Не нашёл, написал свой. Следующий макрос на активном листе удаляет все строки, где в столбце А нет значения. Первая строка (заголовки) игнорируется. [vba]Код
Sub Row_Cleaner() With ThisWorkbook.ActiveSheet Dim Z As Long For Z = 2 To .Cells(Rows.Count, 1).End(xlUp).Row If .Cells(Z, 1).Value = "" Then Rows(Z & ":" & Z).Delete Shift:=xlUp Next Z End With End Sub
[/vba]
Всем привет. Искал вариант попроще. Не нашёл, написал свой. Следующий макрос на активном листе удаляет все строки, где в столбце А нет значения. Первая строка (заголовки) игнорируется. [vba]Код
Sub Row_Cleaner() With ThisWorkbook.ActiveSheet Dim Z As Long For Z = 2 To .Cells(Rows.Count, 1).End(xlUp).Row If .Cells(Z, 1).Value = "" Then Rows(Z & ":" & Z).Delete Shift:=xlUp Next Z End With End Sub
[/vba] Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Ответить
Сообщение Всем привет. Искал вариант попроще. Не нашёл, написал свой. Следующий макрос на активном листе удаляет все строки, где в столбце А нет значения. Первая строка (заголовки) игнорируется. [vba]Код
Sub Row_Cleaner() With ThisWorkbook.ActiveSheet Dim Z As Long For Z = 2 To .Cells(Rows.Count, 1).End(xlUp).Row If .Cells(Z, 1).Value = "" Then Rows(Z & ":" & Z).Delete Shift:=xlUp Next Z End With End Sub
[/vba] Автор - Rioran Дата добавления - 24.06.2014 в 21:28
ikki
Дата: Вторник, 24.06.2014, 21:54 |
Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация:
504
±
Замечаний:
0% ±
Excel 2003, 2010
Rioran , и этот макрос работает у Вас правильно ?
Rioran , и этот макрос работает у Вас правильно ? ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Ответить
Сообщение Rioran , и этот макрос работает у Вас правильно ? Автор - ikki Дата добавления - 24.06.2014 в 21:54
RAN
Дата: Вторник, 24.06.2014, 21:56 |
Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Я тоже сомнении.
Я тоже сомнении. RAN
Быть или не быть, вот в чем загвоздка!
Ответить
Сообщение Я тоже сомнении. Автор - RAN Дата добавления - 24.06.2014 в 21:56
Rioran
Дата: Вторник, 24.06.2014, 21:59 |
Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация:
290
±
Замечаний:
0% ±
Excel 2013
ikki , да, мою задачу решает. В оригинале у меня вместо ActiveSheet стоит Sheets(1), но это не меняет сути. Мне же надо было удалить те строки, для которых в ячейках столбца А пусто. What could go wrong?
ikki , да, мою задачу решает. В оригинале у меня вместо ActiveSheet стоит Sheets(1), но это не меняет сути. Мне же надо было удалить те строки, для которых в ячейках столбца А пусто. What could go wrong? Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Ответить
Сообщение ikki , да, мою задачу решает. В оригинале у меня вместо ActiveSheet стоит Sheets(1), но это не меняет сути. Мне же надо было удалить те строки, для которых в ячейках столбца А пусто. What could go wrong? Автор - Rioran Дата добавления - 24.06.2014 в 21:59
ikki
Дата: Вторник, 24.06.2014, 22:02 |
Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация:
504
±
Замечаний:
0% ±
Excel 2003, 2010
в принципе - он может сработать правильно. если в столбце A нет двух и более подряд пустых ячеек.
в принципе - он может сработать правильно. если в столбце A нет двух и более подряд пустых ячеек. ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Вторник, 24.06.2014, 22:03
Ответить
Сообщение в принципе - он может сработать правильно. если в столбце A нет двух и более подряд пустых ячеек. Автор - ikki Дата добавления - 24.06.2014 в 22:02
Rioran
Дата: Вторник, 24.06.2014, 22:05 |
Сообщение № 6
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация:
290
±
Замечаний:
0% ±
Excel 2013
ikki , я всё осознал, иду исправлять
ikki , я всё осознал, иду исправлять Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Ответить
Сообщение ikki , я всё осознал, иду исправлять Автор - Rioran Дата добавления - 24.06.2014 в 22:05
Rioran
Дата: Вторник, 24.06.2014, 22:08 |
Сообщение № 7
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация:
290
±
Замечаний:
0% ±
Excel 2013
Госсссподи, Юпитер всемогущий, конечно же правильный вариант: [vba]Код
Sub Row_Cleaner() With ThisWorkbook.ActiveSheet Dim Z As Long For Z = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If .Cells(Z, 1).Value = "" Then Rows(Z).Delete Shift:=xlUp Next Z End With End Sub
[/vba] Для начинающих экселистов - сравните два моих кода и найдите ошибку в логике первого кода
Госсссподи, Юпитер всемогущий, конечно же правильный вариант: [vba]Код
Sub Row_Cleaner() With ThisWorkbook.ActiveSheet Dim Z As Long For Z = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If .Cells(Z, 1).Value = "" Then Rows(Z).Delete Shift:=xlUp Next Z End With End Sub
[/vba] Для начинающих экселистов - сравните два моих кода и найдите ошибку в логике первого кода Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Сообщение отредактировал Rioran - Вторник, 24.06.2014, 22:15
Ответить
Сообщение Госсссподи, Юпитер всемогущий, конечно же правильный вариант: [vba]Код
Sub Row_Cleaner() With ThisWorkbook.ActiveSheet Dim Z As Long For Z = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If .Cells(Z, 1).Value = "" Then Rows(Z).Delete Shift:=xlUp Next Z End With End Sub
[/vba] Для начинающих экселистов - сравните два моих кода и найдите ошибку в логике первого кода Автор - Rioran Дата добавления - 24.06.2014 в 22:08
ikki
Дата: Вторник, 24.06.2014, 22:10 |
Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация:
504
±
Замечаний:
0% ±
Excel 2003, 2010
кстати, вполне достаточно писать так: Rows(Z)
кстати, вполне достаточно писать так: Rows(Z) ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Ответить
Сообщение кстати, вполне достаточно писать так: Rows(Z) Автор - ikki Дата добавления - 24.06.2014 в 22:10
Rioran
Дата: Вторник, 24.06.2014, 22:15 |
Сообщение № 9
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация:
290
±
Замечаний:
0% ±
Excel 2013
ikki , спасибо, протестировал, убедился. Заменил в посте № 32 громоздкое макро-рекодеровское Rows(Z & ":" & Z) на Ваше Rows(Z), так красивее =)
ikki , спасибо, протестировал, убедился. Заменил в посте № 32 громоздкое макро-рекодеровское Rows(Z & ":" & Z) на Ваше Rows(Z), так красивее =)Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Ответить
Сообщение ikki , спасибо, протестировал, убедился. Заменил в посте № 32 громоздкое макро-рекодеровское Rows(Z & ":" & Z) на Ваше Rows(Z), так красивее =)Автор - Rioran Дата добавления - 24.06.2014 в 22:15
ikki
Дата: Вторник, 24.06.2014, 22:23 |
Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация:
504
±
Замечаний:
0% ±
Excel 2003, 2010
может, так?[vba]Код
Sub test() On Error Resume Next With Sheets(1) .Range(.[a2], .Cells(.Rows.Count, 1).End(xlUp)).SpecialCells(4).EntireRow.Delete End With End Sub
[/vba]
может, так?[vba]Код
Sub test() On Error Resume Next With Sheets(1) .Range(.[a2], .Cells(.Rows.Count, 1).End(xlUp)).SpecialCells(4).EntireRow.Delete End With End Sub
[/vba] ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Ответить
Сообщение может, так?[vba]Код
Sub test() On Error Resume Next With Sheets(1) .Range(.[a2], .Cells(.Rows.Count, 1).End(xlUp)).SpecialCells(4).EntireRow.Delete End With End Sub
[/vba] Автор - ikki Дата добавления - 24.06.2014 в 22:23
RAN
Дата: Вторник, 24.06.2014, 22:40 |
Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
При всем моем уважении Вам кажется, что ГОТОВЫЕ решения , это именно то место, где есть смысл обсуждать подобные вопросы? Может есть смысл попросить модераторов почистить?
При всем моем уважении Вам кажется, что ГОТОВЫЕ решения , это именно то место, где есть смысл обсуждать подобные вопросы? Может есть смысл попросить модераторов почистить? RAN
Быть или не быть, вот в чем загвоздка!
Ответить
Сообщение При всем моем уважении Вам кажется, что ГОТОВЫЕ решения , это именно то место, где есть смысл обсуждать подобные вопросы? Может есть смысл попросить модераторов почистить? Автор - RAN Дата добавления - 24.06.2014 в 22:40
Rioran
Дата: Вторник, 24.06.2014, 22:51 |
Сообщение № 12
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация:
290
±
Замечаний:
0% ±
Excel 2013
ikki , классный метод, красиво! =) RAN , здесь как раз обсуждается именно готовое решение по теме. Готовое решение предложено, теме соответствует. Что не так?
ikki , классный метод, красиво! =) RAN , здесь как раз обсуждается именно готовое решение по теме. Готовое решение предложено, теме соответствует. Что не так?Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Сообщение отредактировал Rioran - Вторник, 24.06.2014, 22:53
Ответить
Сообщение ikki , классный метод, красиво! =) RAN , здесь как раз обсуждается именно готовое решение по теме. Готовое решение предложено, теме соответствует. Что не так?Автор - Rioran Дата добавления - 24.06.2014 в 22:51
RAN
Дата: Вторник, 24.06.2014, 23:26 |
Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Ну хотя бы то, что предложенный макрос не соответствует теме, т.е. не удаляет пустые строки. (в т.ч и макрос ikki)
Ну хотя бы то, что предложенный макрос не соответствует теме, т.е. не удаляет пустые строки. (в т.ч и макрос ikki) RAN
Быть или не быть, вот в чем загвоздка!
Ответить
Сообщение Ну хотя бы то, что предложенный макрос не соответствует теме, т.е. не удаляет пустые строки. (в т.ч и макрос ikki) Автор - RAN Дата добавления - 24.06.2014 в 23:26
Rioran
Дата: Среда, 25.06.2014, 00:45 |
Сообщение № 14
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация:
290
±
Замечаний:
0% ±
Excel 2013
RAN , с этой точки зрения да, вопрос обсуждаем другой, хоть и смежный. Похоже, было бы лучше новую тему открыть, да поздно. ****** О, спасибо, перенесли! =)
RAN , с этой точки зрения да, вопрос обсуждаем другой, хоть и смежный. Похоже, было бы лучше новую тему открыть, да поздно. ****** О, спасибо, перенесли! =)Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Сообщение отредактировал Rioran - Среда, 25.06.2014, 11:54
Ответить
Сообщение RAN , с этой точки зрения да, вопрос обсуждаем другой, хоть и смежный. Похоже, было бы лучше новую тему открыть, да поздно. ****** О, спасибо, перенесли! =)Автор - Rioran Дата добавления - 25.06.2014 в 00:45
_Boroda_
Дата: Среда, 25.06.2014, 01:38 |
Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 16800
Репутация:
6558
±
Замечаний:
±
2003; 2007; 2010; 2013 RUS
Внесу и свои 5 копеек. SpecialCells(4).EntireRow.Delete
Это был мой любимый способ до той поры, пока я не попался на ограничение Excelя. При достаточно большом количестве несвязанных диапазонов в SpecialCells этот метод правильно не работает. Тут (на форуме) это уже неоднократно обсуждалось.
Внесу и свои 5 копеек. SpecialCells(4).EntireRow.Delete
Это был мой любимый способ до той поры, пока я не попался на ограничение Excelя. При достаточно большом количестве несвязанных диапазонов в SpecialCells этот метод правильно не работает. Тут (на форуме) это уже неоднократно обсуждалось. _Boroda_
Скажи мне, кудесник, любимец ба’гов... Платная помощь: Boroda_Excel@mail.ru Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
Ответить
Сообщение Внесу и свои 5 копеек. SpecialCells(4).EntireRow.Delete
Это был мой любимый способ до той поры, пока я не попался на ограничение Excelя. При достаточно большом количестве несвязанных диапазонов в SpecialCells этот метод правильно не работает. Тут (на форуме) это уже неоднократно обсуждалось. Автор - _Boroda_ Дата добавления - 25.06.2014 в 01:38
Alex_ST
Дата: Среда, 25.06.2014, 09:24 |
Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3219
Репутация:
622
±
Замечаний:
0% ±
2003
Может есть смысл попросить модераторов почистить?
Абсолютно согласен. Это всё оффтоп, т.к. посвящено не полировке сабжа топика, а переделке его "под себя". Хотите об этом поговорить? Создавайте топик в соответствующем разделе форума . _Boroda_ , Саша, ты же сам модератор и своим постом поощряешь офтопп и флуд? [offtop]А по поводу SpecialCells, так с ними вообще нужно очень аккуратно, т.к. у этого свойства имеется гнусное свойство - если в диапазоне, для которого запрашиваешь SpecialCells, более одной ячейки, то всё работает нормально и выбираются только нужные ячейки этого диапазона. А вот если в диапазоне всего одна ячейка, то SpecialCells выбирают ВСЕ ячейки листа, удовлетворяющие условиям.[/offtop]
Может есть смысл попросить модераторов почистить?
Абсолютно согласен. Это всё оффтоп, т.к. посвящено не полировке сабжа топика, а переделке его "под себя". Хотите об этом поговорить? Создавайте топик в соответствующем разделе форума . _Boroda_ , Саша, ты же сам модератор и своим постом поощряешь офтопп и флуд? [offtop]А по поводу SpecialCells, так с ними вообще нужно очень аккуратно, т.к. у этого свойства имеется гнусное свойство - если в диапазоне, для которого запрашиваешь SpecialCells, более одной ячейки, то всё работает нормально и выбираются только нужные ячейки этого диапазона. А вот если в диапазоне всего одна ячейка, то SpecialCells выбирают ВСЕ ячейки листа, удовлетворяющие условиям.[/offtop]Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Ответить
Сообщение Может есть смысл попросить модераторов почистить?
Абсолютно согласен. Это всё оффтоп, т.к. посвящено не полировке сабжа топика, а переделке его "под себя". Хотите об этом поговорить? Создавайте топик в соответствующем разделе форума . _Boroda_ , Саша, ты же сам модератор и своим постом поощряешь офтопп и флуд? [offtop]А по поводу SpecialCells, так с ними вообще нужно очень аккуратно, т.к. у этого свойства имеется гнусное свойство - если в диапазоне, для которого запрашиваешь SpecialCells, более одной ячейки, то всё работает нормально и выбираются только нужные ячейки этого диапазона. А вот если в диапазоне всего одна ячейка, то SpecialCells выбирают ВСЕ ячейки листа, удовлетворяющие условиям.[/offtop]Автор - Alex_ST Дата добавления - 25.06.2014 в 09:24
_Boroda_
Дата: Среда, 25.06.2014, 09:57 |
Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 16800
Репутация:
6558
±
Замечаний:
±
2003; 2007; 2010; 2013 RUS
Саша, ты же сам модератор и своим постом поощряешь офтопп и флуд?
Бе-бе-бе. Все равно тему чистить нужно было. А мне вчера лениво было дележкой заниматься.
Саша, ты же сам модератор и своим постом поощряешь офтопп и флуд?
Бе-бе-бе. Все равно тему чистить нужно было. А мне вчера лениво было дележкой заниматься._Boroda_
Скажи мне, кудесник, любимец ба’гов... Платная помощь: Boroda_Excel@mail.ru Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
Ответить
Сообщение Саша, ты же сам модератор и своим постом поощряешь офтопп и флуд?
Бе-бе-бе. Все равно тему чистить нужно было. А мне вчера лениво было дележкой заниматься.Автор - _Boroda_ Дата добавления - 25.06.2014 в 09:57
Rioran
Дата: Среда, 25.06.2014, 11:58 |
Сообщение № 18
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация:
290
±
Замечаний:
0% ±
Excel 2013
_Boroda_ , спасибо за отделение зёрен от плевел зёрен Alex_ST , ikki , _Boroda_ , получается, что надёжнее код из поста № 7, поочерёдно перебирающий ячейки первого столбца?
_Boroda_ , спасибо за отделение зёрен от плевел зёрен Alex_ST , ikki , _Boroda_ , получается, что надёжнее код из поста № 7, поочерёдно перебирающий ячейки первого столбца?Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Сообщение отредактировал Rioran - Среда, 25.06.2014, 11:58
Ответить
Сообщение _Boroda_ , спасибо за отделение зёрен от плевел зёрен Alex_ST , ikki , _Boroda_ , получается, что надёжнее код из поста № 7, поочерёдно перебирающий ячейки первого столбца?Автор - Rioran Дата добавления - 25.06.2014 в 11:58
RAN
Дата: Среда, 25.06.2014, 12:14 |
Сообщение № 19
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
[vba]Код
Sub Мяу() For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If Len(Cells(i, 1)) Then Else If r Is Nothing Then Set r = Rows(i) Else Set r = Union(r, Rows(i)) End If End If Next r.Delete End Sub
[/vba]
[vba]Код
Sub Мяу() For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If Len(Cells(i, 1)) Then Else If r Is Nothing Then Set r = Rows(i) Else Set r = Union(r, Rows(i)) End If End If Next r.Delete End Sub
[/vba] RAN
Быть или не быть, вот в чем загвоздка!
Ответить
Сообщение [vba]Код
Sub Мяу() For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If Len(Cells(i, 1)) Then Else If r Is Nothing Then Set r = Rows(i) Else Set r = Union(r, Rows(i)) End If End If Next r.Delete End Sub
[/vba] Автор - RAN Дата добавления - 25.06.2014 в 12:14
SkyPro
Дата: Среда, 25.06.2014, 12:24 |
Сообщение № 20
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация:
255
±
Замечаний:
0% ±
2010
Ну и я вариант предложу [vba]Код
Sub deleteEmptyRows() Dim x, i&, delRa As Range x = Range("A1:A" & [a65535].End(xlUp).Row).Value For i = 1 To UBound(x) If x(i, 1) = "" Then If delRa Is Nothing Then Set delRa = Cells(i, 1) Else Set delRa = Union(Cells(i, 1), delRa) End If End If Next If Not delRa Is Nothing Then delRa.EntireRow.Delete End Sub
[/vba] Для офиса младше 2007 [a65535] заменить на [A1048576].
Ну и я вариант предложу [vba]Код
Sub deleteEmptyRows() Dim x, i&, delRa As Range x = Range("A1:A" & [a65535].End(xlUp).Row).Value For i = 1 To UBound(x) If x(i, 1) = "" Then If delRa Is Nothing Then Set delRa = Cells(i, 1) Else Set delRa = Union(Cells(i, 1), delRa) End If End If Next If Not delRa Is Nothing Then delRa.EntireRow.Delete End Sub
[/vba] Для офиса младше 2007 [a65535] заменить на [A1048576]. SkyPro
skypro1111@gmail.com
Сообщение отредактировал SkyPro - Среда, 25.06.2014, 12:26
Ответить
Сообщение Ну и я вариант предложу [vba]Код
Sub deleteEmptyRows() Dim x, i&, delRa As Range x = Range("A1:A" & [a65535].End(xlUp).Row).Value For i = 1 To UBound(x) If x(i, 1) = "" Then If delRa Is Nothing Then Set delRa = Cells(i, 1) Else Set delRa = Union(Cells(i, 1), delRa) End If End If Next If Not delRa Is Nothing Then delRa.EntireRow.Delete End Sub
[/vba] Для офиса младше 2007 [a65535] заменить на [A1048576]. Автор - SkyPro Дата добавления - 25.06.2014 в 12:24