我正在尝试格式化n范围的 4 列,如下所示,向右扩展并由空白列(列“E”)分隔。范围 2 从“F”列开始。
范围 1
A B C D ...
X 行动1 X X
-
-
X 行动2 X X
X 行动3 X X
#N/A #N/A #N/A
对于每个范围,我想删除在第二列上包含“-”或在范围的任何列上包含“#N/A”的行(4 列),期望得到以下结果:
范围 1
A B C D ...
X 动作 1 X X
X 动作 2 X X
X 动作 3 X X
这是 VBA 宏的一部分,所以我不会使用手动自动过滤器。最重要的是,自动过滤还会从其他范围中删除行,这是不期望的。
我正在尝试使用此代码至少在第一个块上进行测试,甚至无法正常工作:
Dim Rng As Range
Set Rng = Range("A4", "D53")
If Not Rng(, 2).Value = "-" Then
Rng.Delete Shift:=xlUp
End If
编辑:我想答案可能离这个不远,但我无法正确管理它。
迷失在VBA中,一些帮助会很棒,提前谢谢
编辑:如果它可以帮助某人,我最终得到了这个工作代码,感谢以下提示:
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