Доброго! Появилась задачка:
Имеется диапазон ячеек в таблице 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
спасибо