Страницы: 1
RSS
Удалить строки по значению в столбце, если такого значения нет в столбце на другом листе
 
Здравствуйте! И снова я за помощью. Суть: в столбце А на первом листе есть коды, и в столбце А на втором листе тоже есть коды, но не полный набор. Нужно удалить на первом листе строки с кодами которых нет на втором листе.
 
Через расширенный фильтр... ;)
ps Поиск, F1.
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
В столбце С НД - можно удалять
Изменено: Михаил Лебедев - 26.06.2015 09:10:56
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Или макросом:
Код
Sub Deymos85()
    Dim arrA()
    Dim arrB()
    Dim blF As Boolean
    Dim lngI As Long
    Dim lngJ As Long
        With Worksheets("Стало полный лист")
            .Range("A1").CurrentRegion.Clear
        End With
        With Worksheets("Было полный лист")
            arrA = .Range("A1").CurrentRegion.Value
        End With
        With Worksheets("Было малый лист")
            arrB = .Range("A1").CurrentRegion.Value
        End With
            For lngI = 1 To UBound(arrA, 1)
                blF = False
                    For lngJ = 1 To UBound(arrB, 1)
                        If arrA(lngI, 1) = arrB(lngJ, 1) Then
                                With Worksheets("Стало полный лист")
                                        If .Cells(Rows.Count, 1).End(xlUp) > 1 Then
                                            .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = arrA(lngI, 1)
                                            .Cells(Rows.Count, 1).End(xlUp).Offset(0, 1).Value = arrA(lngI, 2)
                                        Else
                                            .Cells(1, 1) = arrA(lngI, 1)
                                            .Cells(1, 2) = arrA(lngI, 2)
                                        End If
                                End With
                            blF = True
                            End If
                    Next lngJ
            Next lngI
End Sub
Кому решение нужно - тот пример и рисует.
 
Цитата
Z написал: Через расширенный фильтр...
Вот только загвоздка нужно не фильтровать, а удалять, можете конечно предложить скопировать в другой лист результаты фильтрации. но требуется оперативность.
 
Реализовано, благодаря наводке Михаила Лебедева, спасибо ему.
Код
Sub Макрос1()
' Макрос1 Макрос
    Range("C2:C32").FormulaR1C1 = "=MATCH(RC[-2],'Было малый лист'!R1C1:R30C1,0)"
    ActiveSheet.Range("$A$1:$C$32").AutoFilter Field:=3, Criteria1:="#Н/Д"
    Range("A2:C90").EntireRow.Delete
    Columns("C:C").Delete Shift:=xlToLeft
End Sub

Только нужна шапка для создания фильтра.
Изменено: Deymos85 - 26.06.2015 13:09:53
Страницы: 1
Читают тему
Наверх