Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Удаление строк с пустыми ячейками - Мир MS Excel

Старая форма входа
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_  
Удаление строк с пустыми ячейками
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]


Роман, Москва, 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, и этот макрос работает у Вас правильно? %)


помощь по 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
Репутация: 1163 ±
Замечаний: 0% ±

2010
Я тоже сомнении. <_<


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЯ тоже сомнении. <_<

Автор - 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? :D


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщениеikki, да, мою задачу решает. В оригинале у меня вместо ActiveSheet стоит Sheets(1), но это не меняет сути.

Мне же надо было удалить те строки, для которых в ячейках столбца А пусто. What could go wrong? :D

Автор - Rioran
Дата добавления - 24.06.2014 в 21:59
ikki Дата: Вторник, 24.06.2014, 22:02 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
в принципе - он может сработать правильно.
если в столбце A нет двух и более подряд пустых ячеек.


помощь по 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, я всё осознал, иду исправлять :D


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщениеikki, я всё осознал, иду исправлять :D

Автор - 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]
Для начинающих экселистов - сравните два моих кода и найдите ошибку в логике первого кода yes


Роман, Москва, 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]
Для начинающих экселистов - сравните два моих кода и найдите ошибку в логике первого кода yes

Автор - Rioran
Дата добавления - 24.06.2014 в 22:08
ikki Дата: Вторник, 24.06.2014, 22:10 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
кстати, вполне достаточно писать так: Rows(Z)


помощь по 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), так красивее =)


Роман, Москва, 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]


помощь по 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
Репутация: 1163 ±
Замечаний: 0% ±

2010
При всем моем уважении
Вам кажется, что ГОТОВЫЕ решения , это именно то место, где есть смысл обсуждать подобные вопросы?
Может есть смысл попросить модераторов почистить?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПри всем моем уважении
Вам кажется, что ГОТОВЫЕ решения , это именно то место, где есть смысл обсуждать подобные вопросы?
Может есть смысл попросить модераторов почистить?

Автор - RAN
Дата добавления - 24.06.2014 в 22:40
Rioran Дата: Вторник, 24.06.2014, 22:51 | Сообщение № 12
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
ikki, классный метод, красиво! =)
RAN, здесь как раз обсуждается именно готовое решение по теме. Готовое решение предложено, теме соответствует. Что не так?


Роман, Москва, 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
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ну хотя бы то, что предложенный макрос не соответствует теме, т.е. не удаляет пустые строки. (в т.ч и макрос ikki)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНу хотя бы то, что предложенный макрос не соответствует теме, т.е. не удаляет пустые строки. (в т.ч и макрос ikki)

Автор - RAN
Дата добавления - 24.06.2014 в 23:26
Rioran Дата: Среда, 25.06.2014, 00:45 | Сообщение № 14
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

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

******

О, спасибо, перенесли! =)


Роман, Москва, 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
Группа: Админы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Внесу и свои 5 копеек.
SpecialCells(4).EntireRow.Delete
Это был мой любимый способ до той поры, пока я не попался на ограничение Excelя. При достаточно большом количестве несвязанных диапазонов в SpecialCells этот метод правильно не работает. Тут (на форуме) это уже неоднократно обсуждалось.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3211
Репутация: 609 ±
Замечаний: 0% ±

2003
Может есть смысл попросить модераторов почистить?

Абсолютно согласен.
Это всё оффтоп, т.к. посвящено не полировке сабжа топика, а переделке его "под себя". Хотите об этом поговорить? Создавайте топик в соответствующем разделе форума .
_Boroda_, Саша, ты же сам модератор и своим постом поощряешь офтопп и флуд?
[offtop]А по поводу SpecialCells, так с ними вообще нужно очень аккуратно, т.к. у этого свойства имеется гнусное свойство :) - если в диапазоне, для которого запрашиваешь SpecialCells, более одной ячейки, то всё работает нормально и выбираются только нужные ячейки этого диапазона. А вот если в диапазоне всего одна ячейка, то SpecialCells выбирают ВСЕ ячейки листа, удовлетворяющие условиям.[/offtop]



С уважением,
Алексей
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
Группа: Админы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Саша, ты же сам модератор и своим постом поощряешь офтопп и флуд?

Бе-бе-бе. :p
Все равно тему чистить нужно было. А мне вчера лениво было дележкой заниматься.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Саша, ты же сам модератор и своим постом поощряешь офтопп и флуд?

Бе-бе-бе. :p
Все равно тему чистить нужно было. А мне вчера лениво было дележкой заниматься.

Автор - _Boroda_
Дата добавления - 25.06.2014 в 09:57
Rioran Дата: Среда, 25.06.2014, 11:58 | Сообщение № 18
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, спасибо за отделение зёрен от плевел зёрен :)

Alex_ST, ikki, _Boroda_, получается, что надёжнее код из поста № 7, поочерёдно перебирающий ячейки первого столбца?


Роман, Москва, 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
Репутация: 1163 ±
Замечаний: 0% ±

2010
[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
Дата добавления - 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].


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
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!