Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2009, 18:13   #1
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию Как удалить пустые строки с условиями?

На странице создана таблица. Ее имя "Таблица1".
Внутри этой таблицы макросом надо удалить строки, ячейки которых удовлетворяют следующим требованиям:
ячейки с "A" по "J" пустые, а ячейки с "K" по "O" меньше или равны нулю.
Спасибо.
ru3000 вне форума Ответить с цитированием
Старый 25.06.2009, 18:56   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,849
По умолчанию

Попробуйте так:
Код:
Function СтрокаПустая(ByRef ra As Range) As Boolean
    For Each cell In ra.Columns("a:g"): строка = строка & cell: Next
    If Trim(строка) <> "" Then Exit Function
    СтрокаПустая = Application.CountIf(ra.Columns("k:o"), ">0") = 0
End Function


Sub УдалениеПустыхСтрок()
    Dim ra As Range, delra As Range: Application.ScreenUpdating = False
    For Each ra In [Таблица1].Rows
        If СтрокаПустая(ra) Then
            If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
        End If
    Next
    If Not delra Is Nothing Then delra.Delete
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 25.06.2009, 19:29   #3
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию

Спасибо. Все работает.
Одно пожелание: как исключить из списка удаляемых строк строку с именем "AAA", т.к. она находится в таблице именно с такими параметрами, и макрос ее удаляет. А удалять ее не надо.
ru3000 вне форума Ответить с цитированием
Старый 25.06.2009, 19:39   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,849
По умолчанию

Код:
Function СтрокаПустая(ByRef ra As Range) As Boolean
    For Each cell In ra.Columns("a:g"): строка = строка & cell: Next
    If Trim(строка) <> "" Or Not Intersect([aaa], ra) Is Nothing Then Exit Function
    СтрокаПустая = Application.CountIf(ra.Columns("k:o"), ">0") = 0
End Function
В моём коде все 3 символа aaa - латинские.
EducatedFool вне форума Ответить с цитированием
Старый 25.06.2009, 20:41   #5
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию

Ок.
Только вот, при удалениие пустых строк в таблице, строка "AAA" остается недвижимой, в то время, как остальные строки (без имен) смещаются наверх, как и положено. Получается, что строка "AAA" полностью игнорируется и даже выходит за границы таблицы, если удалено много пустых ячеек.
ru3000 вне форума Ответить с цитированием
Старый 25.06.2009, 21:14   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,849
По умолчанию

Прикрепите файл. Посмотрим, что можно сделать.
EducatedFool вне форума Ответить с цитированием
Старый 26.06.2009, 00:08   #7
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию

Вот пример.
Строка "AAA" скрытая, по счету седьмая. Она является эталоном для создания строк.
Вложения
Тип файла: zip 1.zip (24.4 Кб, 22 просмотров)
ru3000 вне форума Ответить с цитированием
Старый 27.06.2009, 11:54   #8
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию

Может проблема в том, что строка скрытая? Хотя я макросом ее сначала отображаю, потом только удаляю пустые. А может это из-за имени строки? Млин, ничего не получается. А ведь задача-то элементарная.
ru3000 вне форума Ответить с цитированием
Старый 28.06.2009, 05:26   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,849
По умолчанию

Вот так работает нормально:
Код:
Function СтрокаПустая(ByRef ra As Range) As Boolean
    For Each cell In ra.Columns("A:J"): строка = строка & cell: Next
    If Trim(строка) <> "" Then Exit Function
    СтрокаПустая = Application.CountIf(ra.Columns("K:O"), ">0") = 0
End Function

Sub Удалить_пустые_строки()
    Range("Таблица1").Find("шаблон").EntireRow.Hidden = False
    Dim ra As Range, delra As Range: Application.ScreenUpdating = False
    For Each ra In [Таблица1].Rows
        If СтрокаПустая(ra) Then
            If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
        End If
    Next
    If Not delra Is Nothing Then delra.Delete
    Range("Таблица1").Find("шаблон").EntireRow.Hidden = True
End Sub

Sub Создать_строку()
    Application.ScreenUpdating = False: On Error Resume Next
    Range("Таблица1").Find("шаблон").EntireRow.Hidden = False
    Range("Таблица1").Find("шаблон").EntireRow.Insert
    Range("Таблица1").Find("шаблон").Offset(-1).EntireRow.Resize(2).FillUp
    Range("Таблица1").Find("шаблон").ClearContents
    Range("Таблица1").Find("шаблон").EntireRow.Hidden = True
End Sub
Пример во вложении: (не удаляйте слово шаблон из первой ячейки скрытой строки-шаблона)
Вложения
Тип файла: rar Копия Xl0000009.rar (11.4 Кб, 26 просмотров)
EducatedFool вне форума Ответить с цитированием
Старый 29.06.2009, 23:13   #10
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию

Спасибо большое!
ru3000 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пустые строки в текстовом файле Dekker Помощь студентам 1 08.05.2009 15:31
Почему то пустые строки zotox Помощь студентам 3 24.03.2009 15:26
Пустые строки в выпадающим списке в ячейке Shavminator Microsoft Office Excel 4 12.08.2008 17:36
Как удалить слово из строки? Ellita Общие вопросы C/C++ 7 19.09.2007 14:43
Как удалить пустые строки в WORD? KUNAR Microsoft Office Word 2 04.09.2007 19:56