Я предпочитаю помещать значения в массив, если вы собираетесь изменять кучу ячеек в подпрограмме. Как правило, это значительно ускоряет процесс.
Начните с настройки таблицы и объектов диапазона. Обратите внимание, что приведенный ниже код в настоящее время использует индекс 1 для рабочего листа здесь: Set ws = ThisWorkbook.Worksheets(1)
. Если это не тот лист, который вам лично нужен, вам придется это изменить.
Затем поместите содержимое ячейки всего диапазона в массив. Как я упоминал ранее, этот процесс быстрее, чем вносить изменения в отдельные ячейки 1 за один раз.
Зацикливать массив, проверяя либо конкретное значение ошибки #N/A
, либо другие критерии. Если этот критерий совпадает, вы введете другой цикл, который быстро проходит по «столбцам» в строке, и будет удалять значения только из указанных вами столбцов.
После завершения переписать массив обратно врабочий лист.
Sub main()
Dim ws As Worksheet, rng As Range, dataArr() As Variant
Set ws = ThisWorkbook.Worksheets(1)
Set rng = ws.Range("J3:X" & ws.Cells(ws.Rows.Count, "J").End(xlUp).Row)
' Place the entire contents of worksheet range into an array
dataArr = rng.Value
Dim i As Long, x As Long, clearRow As Boolean
For i = LBound(dataArr) To UBound(dataArr)
If IsError(dataArr(i, 1)) Then
If dataArr(i, 1) = CVErr(xlErrNA) Then clearRow = True
ElseIf dataArr(i, 1) = vbNullString Or dataArr(i, 1) = 0 Then
clearRow = True
End If
' Loop thru the columns (x) of the current row (i)
If clearRow Then
For x = 1 To 15
Select Case x
Case 1, 2, 7 To 15
dataArr(i, x) = ""
End Select
Next x
clearRow = False
End If
Next i
' Re-write the entire array back to the worksheet in one step
rng.Value = dataArr
End Sub