我有一个包含9列的数据集。我想检查每一行,看看最后3列是否为空。如果所有3都为空,我想删除该行。我现在正试图在VBA中这样做,但我是一个新手编程,发现自己完全不知所措。
我写的伪代码如下:
For Row i
If(Col 1 & Col 2 & Col 3) = blank
Then delete Row i
Move on to next Row
答案 0 :(得分:1)
我喜欢以下
Dim iArea As Long
With Range("E:G") '<--| change "E:G" to your actual last three columns indexes
If WorksheetFunction.CountBlank(.Cells) < 3 Then Exit Sub
With .SpecialCells(xlCellTypeBlanks)
For iArea = .Areas.Count To 1 Step -1
If .Areas(iArea).Count Mod 3 = 0 Then .Areas(iArea).EntireRow.Delete
Next
End With
End With
答案 1 :(得分:0)
假设您至少有一行始终填写,您可以使用以下内容:
Dim LR as Long
Dim i as Integer
LR = Cells(Sheets("REF").Rows.Count,1).End(xlUp).Row
For i = 1 to 9
If Range(Cells(LR-3,i),(Cells(LR,i)).Value="" Then
Columns(i).Delete
Else:
End If
Next i
这可以通过将最后一行定义为LR,并将变量定义为i来实现。您将检查列“i”以确定列的最后3行是否为“”,即它是空白的;可能会尝试使用ISBLANK(),但这不适用于数组。如果是这样,那么你将删除该列,i。然后代码将移动到下一个i。 FOR LOOP使用i从1开始并转到9,这对应于从第1列(A)开始到第9(I)列结束。
编辑:
我似乎有误读,这应该是空的,应该删除,在列/行方面......这段代码将被重写为:
Dim LR as Long
Dim i as Integer
LR = Cells(Sheets("REF").Rows.Count,1).End(xlUp).Row
For i = LR to 2 Step -1 'Assumes you have headers in Row1
If AND(ISBLANK(Cells(i,7)),ISBLANK(Cells(i,8)),ISBLANK(Cells(i,9)) Then
Rows(i).Delete
End If
Next i
重要的变化是检查行中最后3列中的每一列是否为空,ISBLANK(),如果条件满足则更改行被删除,以及更改要循环的内容。
答案 2 :(得分:-1)
这是另一个答案,假设您的最后三列以“G”,“H”,“I”开头。
Sub DeleteRowWithLastThreeColumnsBlank()
Dim N As Long, i As Long
N = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To N
If Cells(i, "G").Value = "" And Cells(i, "H").Value = "" And Cells(i, "I").Value = "" Then
Rows(i).EntireRow.Delete
N = Cells(Rows.Count, "A").End(xlUp).Row
End If
Next i
End Sub