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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2014, 10:42   #1
inspect0r
Новичок
Джуниор
 
Регистрация: 15.08.2014
Сообщений: 3
По умолчанию Удаление строк, в которых ячейка помечена цветом

Здравствуйте.
У меня есть 3 файла excel: "old", "new", "сравнение". В первых 2-х списки с ФИО и доп. данными построчно, выгружаемые из программы раз в месяц. old - прошлый месяц, new - соответственно текущий. В файле "сравнение" записан макрос, он сравнивает old и new по столбцу ФИО на совпадение, если ФИО и там и там, подсвечивает ячейку с ФИО в обоих желтым цветом.
Подскажите, пожалуйста, макрос в файл "сравнение", который бы удалял из "new" строку целиком с подсвеченной ячейкой.
Спасибо.
inspect0r вне форума Ответить с цитированием
Старый 15.08.2014, 10:55   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Допишите рекордером фильтрацию по цвету и удаление - получите свой макрос.
Ну или вообще сразу и удаляйте вместо подсвечивания.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 15.08.2014, 10:57   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в Вашем макросе где-то есть что-то такое:
Код:
cells(r,c).Interior.color = Желтый
замените на
Код:
cells(r,c).entirerow.delete
учитывайте - это совет, а не решение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 15.08.2014, 12:48   #4
inspect0r
Новичок
Джуниор
 
Регистрация: 15.08.2014
Сообщений: 3
По умолчанию

IgorGO
попробовал подставить, не заработало,
вываливается в ошибку "невозможно получить свойство FindNext класса Range"
Код:
Sub Main()
Dim i As Long, x As Range, Fst As String
    Application.ScreenUpdating = False
    Workbooks("old.xls").Sheets(1).Activate
    With Workbooks("new.xls").Sheets(1)
        Columns("C").Interior.ColorIndex = xlNone
        .Columns("C").Interior.ColorIndex = xlNone
        For i = 1 To Cells(Rows.Count, "C").End(xlUp).Row
            Set x = .Columns("C").Find(what:=Cells(i, "C"), LookAt:=xlWhole)
            If Not x Is Nothing Then
                Cells(i, "C").Interior.ColorIndex = 6
                Fst = x.Address
                Do
                    .Cells(x.Row, "C").EntireRow.Delete //было так: .Cells(x.Row, "C").Interior.ColorIndex = 6
                    Set x = .Columns("C").FindNext(x)
                Loop While Fst <> x.Address
            End If
        Next
    End With    
End Sub
что нужно еще поправить?
inspect0r вне форума Ответить с цитированием
Старый 15.08.2014, 13:45   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub Main()
Dim i As Long, x As Range, Fst As String, rgO As Range, rgN As Range
    Application.ScreenUpdating = False
    Workbooks("old.xls").Sheets(1).Activate
    With Workbooks("new.xls").Sheets(1)
        Columns("C").Interior.ColorIndex = xlNone
        .Columns("C").Interior.ColorIndex = xlNone
        For i = 1 To Cells(Rows.Count, "C").End(xlUp).Row
            Set x = .Columns("C").Find(what:=Cells(i, "C"), LookAt:=xlWhole)
            If Not x Is Nothing Then
                If rgO Is Nothing Then Set rgO = Cells(i, "C") Else Set rgO = Application.Union(rgO, Cells(i, 3))
                Fst = x.Address
                Do
                    If rgN Is Nothing Then Set rgN = .Cells(x.Row, "C") Else Set rgN = Application.Union(rgN, .Cells(x.Row, 3))
                    Set x = .Columns("C").FindNext(x)
                Loop While Fst <> x.Address
            End If
        Next
        rgN.EntireRow.Delete
        rgO.EntireRow.Delete
    End With
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 15.08.2014, 14:45   #6
inspect0r
Новичок
Джуниор
 
Регистрация: 15.08.2014
Сообщений: 3
По умолчанию

Класс! Работает.
Большое Спасибо.
inspect0r вне форума Ответить с цитированием
Старый 15.08.2014, 15:17   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
который бы удалял из "new" строку целиком с подсвеченной ячейкой
в предложенном мною варианте повторы в old.xls тоже удаляются

и чтобы это не падало по ошибке, когда нет повторов, надо так написать:
Код:
if not rgn is nothing then rgN.EntireRow.Delete
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить номера строк прямоугольного массива, хотя бы один элемент которых равен с, и элементы этих строк умножить на d ksesh Паскаль, Turbo Pascal, PascalABC.NET 3 03.06.2014 08:28
Для матрицы из 3 столбцов и 7 строк отпечатать номера тех строк, в которых третий элемент больше суммы двух других элементов строк abramov Помощь студентам 2 03.12.2013 10:15
Выделение строк цветом Sergey112233 Microsoft Office Excel 2 19.01.2011 22:41
выделение цветом повторяющихся строк Wally-Val Microsoft Office Excel 4 29.08.2010 21:26
заливка цветом строк ivan52agronom Microsoft Office Excel 12 13.02.2010 23:10