Excel VBA: Удаление строк если значение функции false

Автор nedoumka, 16 февраля 2017, 13:13

nedoumka

Доброго! Появилась задачка:

Имеется диапазон ячеек в таблице Excel в одном столбце (например, А1-А19568). В каждой ячейке этого диапазона есть шестнадцатизначное число. Есть функция:

Function Fun2(num$) As Boolean
    Dim i%, sum%, p%
    For i = 1 To Len(num)
        p = Mid$(num, i, 1) * (i Mod 2 + 1)
        sum = sum + IIf(p > 9, p - 9, p)
    Next i
    Fun2 = sum Mod 10 = 0
End Function

Подскажите, пожалуйста, как удалить все строки с ячейками значение которых false?

Администратор

Метод
Sub Метод()

    Dim arr(), lr As Long, i As Long
   
   
    '1. Отключение монитора, чтобы ускорить работу программы.
    Application.ScreenUpdating = False
   
    '2. Поиск последней строки в столбце A.
        ' Если есть скрытые строки, то их нужно отобразить, иначе скрытые строки могут быть не обработаны.
    lr = Cells(Rows.Count, "A").End(xlUp).Row
   
    '3. Копирование данных из листа в массив, чтобы ускорить работу макроса:
        ' с массивом программа быстрее работает, чем с ячейками листа.
    arr() = Range("A1:A" & lr).Value
   
    '4. Удаление строк.
        ' Движение снизу вверх, т.к. будет удаление строк.
        ' Если двигаться сверху вниз, то после удаления строки порядковая
        ' нумерация строк будет меняться и цикл "For To" нельзя использовать.
    For i = UBound(arr, 1) To 1 Step -1
        ' Запуск функции.
        ' CStr - т.к. в функции аргумент имеет тип данных "String", а массив arr имеет тип данных "Variant".
        If Fun2(CStr(arr(i, 1))) = False Then
            Rows(i).Delete
        End If
    Next i
   
    '5. Вкл. монитора.
    Application.ScreenUpdating = True
   
End Sub
[свернуть]