尝试格式化以下4列的 n 范围,向右扩展并用空白列(col“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
对于每个范围,我想删除第二列中包含“ - ”的行(4列)或该范围的任何列上的“#N / A”,期望得到以下结果:
范围1
A B C D ...
X措施1 X X
X措施2 X X
X Action3 X X
这是VBA宏的一部分,所以我不会使用手动自动过滤器。最重要的是,自动过滤还会删除其他范围内的行,这是不期望的。
我正在尝试使用此代码至少用于测试第一个块,甚至不能正常工作:
Dim Rng As Range
Set Rng = Range("A4", "D53")
If Not Rng(, 2).Value = "-" Then
Rng.Delete Shift:=xlUp
End If
编辑:我猜答案可能离this不远,但我无法正确管理。
在VBA中失败,一些帮助会很棒,提前
编辑:如果它可以帮助某人,我最终将这个工作代码thx提供给以下提示:
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
答案 0 :(得分:1)
这应该是你:
Sub RemoveX()
Dim iRows As Integer
Dim x As Integer
Application.ScreenUpdating = False
iRows = Range("A1").CurrentRegion.Rows.Count
For x = iRows To 1 Step -1
If Application.WorksheetFunction.IsNA(Cells(x, 2)) Then
Application.Intersect(Cells(x, 2).EntireRow, _
Range("A1:D1").EntireColumn).Delete
ElseIf Cells(x, 2).Value = "-" Then
Application.Intersect(Cells(x, 2).EntireRow, _
Range("A1:D1").EntireColumn).Delete
End If
Next x
Application.ScreenUpdating = True
End Sub
CurrentRegion
是您点击A1并按Ctrl-A获得的区域。
如果可以整理一下(使用Range引用而不使用EntireRow或-Column),但它可以工作。