Страницы: 1
RSS
Удаление строки по значениям из массива, Удалить строки по совпадению со значениями из массива
 
Привет. Есть 2 листа. на 1 листе есть таблица со значениями, которые нужно почистить. На втором листе есть таблица со значениями, которые нужно искать в таблице на первом листе и удалять строку, если совпадение. Нужно искать частичное совпадение, т.к. на втором листе часть строки из первого листа.
Имеется макрос, но он не делает ничего, просто проходит циклы, но не удаляет строки. Не могу понять в чем проблема. Файл прикреплен.

Option Compare Text
Sub test()
Dim lastrowto As Long
Dim e As Long
Dim a As Long
Dim lastrowdel As Long
Set result = Workbooks("result CF.xlsm").Worksheets("result")
Set result1 = Workbooks("result CF.xlsm").Worksheets("лист1")
With result.Range("result")
lastrowto = result.Cells(1, 5).End(xlDown).Row
lastrowdel = result1.Cells(1, 8 ).End(xlDown).Row
   For e = lastrowto To 1 Step -1
       For a = 1 To lastrowdel
           If result.Cells(e, 7).Value Like result1.Cells(a, 8 ).Value Then result.Cells(e, 7).EntireRow.Delete
       Exit For
       Next a
   Next e
End With
End Sub
Изменено: Hellmaster - 23.04.2019 13:56:50
 
Hellmaster, потому, что = а не like
 
Я уже менял like на = и обратно
 
Exit For ---- ?
 
Ivan.kh, выходит из цикла а, чтобы перейти к следующему циклу е. вроде так это должно работать
 
Доброе время суток
Цитата
Hellmaster написал:
выходит из цикла а,
Правильно, но только вне зависимости от того нашли ли что-нибудь или нет. For a = 1 выполняется ровно один раз.
 
В отладке пробовали пройтись? Когда оно у Вас выходит?
Найдите разницу
Код
Option Compare Text
Sub test()
    Dim lastrowto As Long, e As Long, a As Long, lastrowdel As Long
        
    Set result = Worksheets("result")
    Set result1 = Worksheets("лист1")
    
    lastrowto = result.Cells(1, 5).End(xlDown).Row
    lastrowdel = result1.Cells(1, 8).End(xlDown).Row
    For e = lastrowto To 1 Step -1
        For a = 1 To lastrowdel
            If result.Cells(e, 7).Value Like result1.Cells(a, 8).Value Then
                result.Cells(e, 7).EntireRow.Delete
                Exit For
            End If
        Next a
    Next e
End Sub
Изменено: Ivan.kh - 23.04.2019 14:13:04 (поправил кракозябры)
 
Ivan.kh, спасибо огромное. все гениальное как всегда просто.
Страницы: 1
Наверх