从Excel中的一组3列中删除缺少的数据

时间:2017-02-23 16:03:12

标签: excel vba excel-vba

我有一个包含9列的数据集。我想检查每一行,看看最后3列是否为空。如果所有3都为空,我想删除该行。我现在正试图在VBA中这样做,但我是一个新手编程,发现自己完全不知所措。

我写的伪代码如下:

For Row i
If(Col 1 & Col 2 & Col 3) = blank
Then delete Row i
Move on to next Row 

3 个答案:

答案 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