Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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

Попробуйте так:
Код:
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, 20:29   #3
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию

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

Код:
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, 21:41   #5
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию

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

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

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

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

Вот так работает нормально:
Код:
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 вне форума Ответить с цитированием
Старый 30.06.2009, 00:13   #10
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию

Спасибо большое!
ru3000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


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