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

Вход

Регистрация

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

 

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

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос удаления строки, если вторая ячейка строки пустая (Макросы/Sub)
Макрос удаления строки, если вторая ячейка строки пустая
Yar4i4 Дата: Понедельник, 15.02.2016, 09:56 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Доброе утро.
Таблица содержит ненужные пустые строки, которые нужно удалить.
Строки эти начинаются с (A20) всегда. Заканчиваются неизвестно какой строкой.
Вторая ячейка строк подлежащих удалению содержит "..." или пуста. Она имеет границу ( в отличие от ячеек из "бороды" (A37-A45 - их удалять нельзя)).
Нужен макрос удаляющий эти всегда разные строки (27, 28, 30, 33)
К сообщению приложен файл: 11111111.xlsx(13Kb)
 
Ответить
СообщениеДоброе утро.
Таблица содержит ненужные пустые строки, которые нужно удалить.
Строки эти начинаются с (A20) всегда. Заканчиваются неизвестно какой строкой.
Вторая ячейка строк подлежащих удалению содержит "..." или пуста. Она имеет границу ( в отличие от ячеек из "бороды" (A37-A45 - их удалять нельзя)).
Нужен макрос удаляющий эти всегда разные строки (27, 28, 30, 33)

Автор - Yar4i4
Дата добавления - 15.02.2016 в 09:56
Pelena Дата: Понедельник, 15.02.2016, 10:06 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11756
Репутация: 2596 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеГотовое решение Удаление строк по критерию

Автор - Pelena
Дата добавления - 15.02.2016 в 10:06
Апострофф Дата: Понедельник, 15.02.2016, 10:19 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 28 ±
Замечаний: 0% ±

Excel 2003
Вариант -
[vba]
Код
For r = 20 To Cells.Rows.Count
  If Cells(r, 1).Borders(xlEdgeRight).LineStyle = xlNone Then Exit For
  If Cells(r, 2) = "" Or Cells(r, 2) = "..." Or Cells(r, 2) = "…" Then Rows(r).Delete: r = r - 1
Next r
[/vba]
 
Ответить
СообщениеВариант -
[vba]
Код
For r = 20 To Cells.Rows.Count
  If Cells(r, 1).Borders(xlEdgeRight).LineStyle = xlNone Then Exit For
  If Cells(r, 2) = "" Or Cells(r, 2) = "..." Or Cells(r, 2) = "…" Then Rows(r).Delete: r = r - 1
Next r
[/vba]

Автор - Апострофф
Дата добавления - 15.02.2016 в 10:19
RAN Дата: Понедельник, 15.02.2016, 10:23 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4604
Репутация: 925 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub Мяу()
    Dim lr&, i&
    Application.ScreenUpdating = False
    With ActiveSheet
        lr = .Columns(1).Find("Исполнитель", , , xlPart).Row - 3
        For i = lr To 20 Step -1
            If Len(.Cells(i, 2)) = 0 Or Left$(.Cells(i, 2).Value, 1) Like "[. " & Chr(133) & "]" Then .Rows(i).Delete
        Next
    End With
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Sub Мяу()
    Dim lr&, i&
    Application.ScreenUpdating = False
    With ActiveSheet
        lr = .Columns(1).Find("Исполнитель", , , xlPart).Row - 3
        For i = lr To 20 Step -1
            If Len(.Cells(i, 2)) = 0 Or Left$(.Cells(i, 2).Value, 1) Like "[. " & Chr(133) & "]" Then .Rows(i).Delete
        Next
    End With
End Sub
[/vba]

Автор - RAN
Дата добавления - 15.02.2016 в 10:23
Апострофф Дата: Понедельник, 15.02.2016, 10:33 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 28 ±
Замечаний: 0% ±

Excel 2003
[offtop]ТС не говорил, что данные, не подлежащие удалению, не могут начинаться с точки.[/offtop]
 
Ответить
Сообщение[offtop]ТС не говорил, что данные, не подлежащие удалению, не могут начинаться с точки.[/offtop]

Автор - Апострофф
Дата добавления - 15.02.2016 в 10:33
Wasilich Дата: Понедельник, 15.02.2016, 12:35 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1209
Репутация: 321 ±
Замечаний: 0% ±

2003
Интересно, кто ставит в одном месте три точки в другом троеточие - Chr(133)?
Так можно ставить что попало и как попало - пробел три точки, точка пробел точка и т. д. Порядок какой то нужен.
К сообщению приложен файл: Yar4i4.xls(40Kb)
 
Ответить
СообщениеИнтересно, кто ставит в одном месте три точки в другом троеточие - Chr(133)?
Так можно ставить что попало и как попало - пробел три точки, точка пробел точка и т. д. Порядок какой то нужен.

Автор - Wasilich
Дата добавления - 15.02.2016 в 12:35
Yar4i4 Дата: Понедельник, 15.02.2016, 13:06 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Спасибо.
Моей радости нет границ. Ещё неделю назад я не представлял, что это выполнимо.
 
Ответить
СообщениеСпасибо.
Моей радости нет границ. Ещё неделю назад я не представлял, что это выполнимо.

Автор - Yar4i4
Дата добавления - 15.02.2016 в 13:06
Yar4i4 Дата: Среда, 24.02.2016, 09:28 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
одном месте три точки в другом троеточие

Доброго постпраздничного дня Вам!
Пользуюсь Вашей версией макроса. Сегодня увидел, что макрос не сработал, т.к. ко мне данные поступили в неверном виде. В ячейке, определяющей удаление всей строки троеточие (или три точки) располагались не в начале, а в конце.
Я скопировал содержимое ячейки:
"М/к труб стальных бесшовных горячедеформированных..."
Как можно учесть эти точки, если они встречаться будут в ячейке?
(все первоначальные условия такие же , только точки (троеточие - не понял пока что это) не стационарны в ячейке.
Спасибо.

Всех мужиков с прошедшим праздником!
 
Ответить
Сообщение
одном месте три точки в другом троеточие

Доброго постпраздничного дня Вам!
Пользуюсь Вашей версией макроса. Сегодня увидел, что макрос не сработал, т.к. ко мне данные поступили в неверном виде. В ячейке, определяющей удаление всей строки троеточие (или три точки) располагались не в начале, а в конце.
Я скопировал содержимое ячейки:
"М/к труб стальных бесшовных горячедеформированных..."
Как можно учесть эти точки, если они встречаться будут в ячейке?
(все первоначальные условия такие же , только точки (троеточие - не понял пока что это) не стационарны в ячейке.
Спасибо.

Всех мужиков с прошедшим праздником!

Автор - Yar4i4
Дата добавления - 24.02.2016 в 09:28
RAN Дата: Среда, 24.02.2016, 09:38 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4604
Репутация: 925 ±
Замечаний: 0% ±

2010
[vba]
Код
Or .Cells(i, 2).Value Like "*...*"
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Or .Cells(i, 2).Value Like "*...*"
[/vba]

Автор - RAN
Дата добавления - 24.02.2016 в 09:38
Yar4i4 Дата: Среда, 24.02.2016, 13:02 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013

Спасибо.
Я вписал этот код в строку с условием "если" и заработало.
 
Ответить
Сообщение
Спасибо.
Я вписал этот код в строку с условием "если" и заработало.

Автор - Yar4i4
Дата добавления - 24.02.2016 в 13:02
Yar4i Дата: Среда, 11.01.2017, 14:18 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
День добрый дамы и господа.
Пользуюсь данным кодом, всё замечательно, но...
В результате объединения сдвоенных строк происходит сдвиг вниз полупустой строки.
И данная полупустая строка всегде лежит под массивом заполненных ячеек A1:M... (в нашем случае M44). И у этой полупустой строки всегда заполнены столбец M, I и L (в нашем примере это 45 строка).
Думал удалить её через:
[vba]
Код
s = Range("A" & Rows.Count).End(xlUp).Row
Cells(s + 1, 1) =
[/vba]
Но вот куда вставить .Delete?
К сообщению приложен файл: 0217415.xlsx(16Kb)
 
Ответить
СообщениеДень добрый дамы и господа.
Пользуюсь данным кодом, всё замечательно, но...
В результате объединения сдвоенных строк происходит сдвиг вниз полупустой строки.
И данная полупустая строка всегде лежит под массивом заполненных ячеек A1:M... (в нашем случае M44). И у этой полупустой строки всегда заполнены столбец M, I и L (в нашем примере это 45 строка).
Думал удалить её через:
[vba]
Код
s = Range("A" & Rows.Count).End(xlUp).Row
Cells(s + 1, 1) =
[/vba]
Но вот куда вставить .Delete?

Автор - Yar4i
Дата добавления - 11.01.2017 в 14:18
Alex_ST Дата: Среда, 11.01.2017, 15:29 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3048
Репутация: 566 ±
Замечаний: 0% ±

2003
ОБЪЕДИНЁННЫЕ ЯЧЕЙКИ - ЗЛО!!!
Отвыкайте от них сами и отучайте других.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеОБЪЕДИНЁННЫЕ ЯЧЕЙКИ - ЗЛО!!!
Отвыкайте от них сами и отучайте других.

Автор - Alex_ST
Дата добавления - 11.01.2017 в 15:29
Yar4i Дата: Среда, 11.01.2017, 17:45 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
ОБЪЕДИНЁННЫЕ ЯЧЕЙКИ - ЗЛО

да я знаю.
я неверно написал... не в результате "объединения", а в результате "разъединения". Я разъединяю уже объединённое ранее каким-то хулиганом и вот!) :D
Причем разъединяю сразу как только скопирую видимые ячейки на новый лист.
Далее запускаю макрос удаляющий все строки, если ячейка B пуста, начиная с конца, но остается 45 строка.
Так как в 45ой строке ячейка В пуста.
 
Ответить
Сообщение
ОБЪЕДИНЁННЫЕ ЯЧЕЙКИ - ЗЛО

да я знаю.
я неверно написал... не в результате "объединения", а в результате "разъединения". Я разъединяю уже объединённое ранее каким-то хулиганом и вот!) :D
Причем разъединяю сразу как только скопирую видимые ячейки на новый лист.
Далее запускаю макрос удаляющий все строки, если ячейка B пуста, начиная с конца, но остается 45 строка.
Так как в 45ой строке ячейка В пуста.

Автор - Yar4i
Дата добавления - 11.01.2017 в 17:45
Pelena Дата: Среда, 11.01.2017, 18:52 | Сообщение № 14
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11756
Репутация: 2596 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
начиная с конца

Начните цикл на строку ниже, либо вычисляйте последнюю строку по столбцу М, а не по А


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщение
начиная с конца

Начните цикл на строку ниже, либо вычисляйте последнюю строку по столбцу М, а не по А

Автор - Pelena
Дата добавления - 11.01.2017 в 18:52
Yar4i Дата: Четверг, 12.01.2017, 12:27 | Сообщение № 15
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
цикл на строку ниже

а куда -1 вписать? (или +1)
По столбцу М думал, но этот столбец не стабилен. В первых же двух столбцах идет нумерация (нет номера - строку не берем, а коль номер есть - то милости просим))
 
Ответить
Сообщение
цикл на строку ниже

а куда -1 вписать? (или +1)
По столбцу М думал, но этот столбец не стабилен. В первых же двух столбцах идет нумерация (нет номера - строку не берем, а коль номер есть - то милости просим))

Автор - Yar4i
Дата добавления - 12.01.2017 в 12:27
Pelena Дата: Четверг, 12.01.2017, 12:36 | Сообщение № 16
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11756
Репутация: 2596 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Я же не знаю, какой Вы макрос используете.
Вот например, из четвертого сообщения. Считается номер строки, с которой начинается удаление
[vba]
Код
lr = .Columns(1).Find("Исполнитель", , , xlPart).Row - 3
[/vba]
С неё начинается следующий цикл For
Напишите
[vba]
Код
lr = .Columns(1).Find("Исполнитель", , , xlPart).Row - 2
[/vba]
получите строку на одну ниже


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеЯ же не знаю, какой Вы макрос используете.
Вот например, из четвертого сообщения. Считается номер строки, с которой начинается удаление
[vba]
Код
lr = .Columns(1).Find("Исполнитель", , , xlPart).Row - 3
[/vba]
С неё начинается следующий цикл For
Напишите
[vba]
Код
lr = .Columns(1).Find("Исполнитель", , , xlPart).Row - 2
[/vba]
получите строку на одну ниже

Автор - Pelena
Дата добавления - 12.01.2017 в 12:36
Yar4i Дата: Среда, 25.01.2017, 16:48 | Сообщение № 17
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
из четвертого сообщения

В одиннадцатом сообщении файл с новой кучкой данных и через FIND не выйдет, т.к. мы не знаем где заканчиваются данные внизу. В данном случае они заканчиваются 45ой строкой и её-то и нужно удалить, т.к. у неё пустые ячейки A45, B45, C45, D45, E45 и т.д., а вот G45, I45 и L45 содержат нули (они всегда содержат цифры, но какая это строка не известно, иногда может быть и вторая -

т.е. начиная с последней неизвестной строки и заканчивая второй строкой нужно найти строки с пустой ячейкой A и удалить её.
[vba]
Код
PS = Range("A" & Rows.Count).End(xlUp).Row
For i = PS To 2 Step -1
If Cells(i, 1) = ""  Then
Rows(i).Delete
End If
Next
[/vba] Этот код удаляет все строки между последней первой/верхней и самой нижней 44ой (по столбцу "A") и не удаляет 45ую строку.


Сообщение отредактировал Yar4i - Среда, 25.01.2017, 17:31
 
Ответить
Сообщение
из четвертого сообщения

В одиннадцатом сообщении файл с новой кучкой данных и через FIND не выйдет, т.к. мы не знаем где заканчиваются данные внизу. В данном случае они заканчиваются 45ой строкой и её-то и нужно удалить, т.к. у неё пустые ячейки A45, B45, C45, D45, E45 и т.д., а вот G45, I45 и L45 содержат нули (они всегда содержат цифры, но какая это строка не известно, иногда может быть и вторая -

т.е. начиная с последней неизвестной строки и заканчивая второй строкой нужно найти строки с пустой ячейкой A и удалить её.
[vba]
Код
PS = Range("A" & Rows.Count).End(xlUp).Row
For i = PS To 2 Step -1
If Cells(i, 1) = ""  Then
Rows(i).Delete
End If
Next
[/vba] Этот код удаляет все строки между последней первой/верхней и самой нижней 44ой (по столбцу "A") и не удаляет 45ую строку.

Автор - Yar4i
Дата добавления - 25.01.2017 в 16:48
RAN Дата: Суббота, 04.02.2017, 12:05 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4604
Репутация: 925 ±
Замечаний: 0% ±

2010
Сорокпоследняя строка
[vba]
Код
PS = Cells.Find("*", , , , xlByRows, xlPrevious).Row
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеСорокпоследняя строка
[vba]
Код
PS = Cells.Find("*", , , , xlByRows, xlPrevious).Row
[/vba]

Автор - RAN
Дата добавления - 04.02.2017 в 12:05
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос удаления строки, если вторая ячейка строки пустая (Макросы/Sub)
Страница 1 из 11
Поиск:

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