Я пытаюсь отформатировать n диапазонов из 4 столбцов, как показано ниже, расширяя их вправо и разделяя пустым столбцом (столбец "E"). Диапазон 2 начинается со столбца "F".
диапазон 1
А Б В Г ...
X Действие1 X X
-
-
X Действие2 X X
X Действие3 X X
#Н/Д #Н/Д #Н/Д
Для каждого диапазона я хочу удалить строки (из 4 столбцов), содержащие «-» во втором столбце или «# N / A» в любом столбце диапазона, ожидая этого результата:
диапазон 1
А Б В Г ...
X Действие1 X X
X Действие2 X X
X Действие3 X X
Это часть макроса VBA, поэтому я не буду использовать ручные автофильтры. Кроме того, автофильтрация также удалит строки из других диапазонов, чего не ожидается.
Я пробую этот код, по крайней мере, для тестирования на 1-м блоке, даже не работая:
Dim Rng As Range
Set Rng = Range("A4", "D53")
If Not Rng(, 2).Value = "-" Then
Rng.Delete Shift:=xlUp
End If
редактировать: я думаю, что ответ может быть недалеко от это, но я не могу правильно управлять им.
Потерялся в VBA, некоторая помощь была бы отличной, спасибо заранее
EDIT: если это может кому-то помочь, я получил этот рабочий код, спасибо за приведенные ниже подсказки:
Dim iRows, iCols, NbLig, x, BlockSize, BlockOffset, MyOffsetBtwnBlocks, CountBlocks As Integer
BlockSize = 4
NbLig = Range("A3").SpecialCells(xlCellTypeLastCell).Row
CountBlocks = 0
For iCols = 2 To NbCol Step BlockSize + 1
iRows = Range(Cells(3, iCols), Cells(NbLig, iCols + BlockSize).End(xlToLeft)).Rows.Count
For x = iRows To 3 Step -1
If Application.WorksheetFunction.IsNA(Cells(x, iCols + 1)) Then
Application.Intersect(Cells(x, iCols + 1).EntireRow, _
Range(Cells(3, iCols), Cells(3, iCols + BlockSize)).EntireColumn).Delete
ElseIf Application.WorksheetFunction.IsNA(Cells(x, iCols + 2)) Then
Application.Intersect(Cells(x, iCols + 2).EntireRow, _
Range(Cells(3, iCols), Cells(3, iCols + BlockSize)).EntireColumn).Delete
ElseIf Cells(x, iCols + 1).Value = "-" Then
Application.Intersect(Cells(x, iCols + 1).EntireRow, _
Range(Cells(3, iCols), Cells(3, iCols + BlockSize)).EntireColumn).Delete
End If
CountBlocks = CountBlocks + 1
Next x
Next iCols