在Excel中删除一组3列中的缺失数据
我有一个包含9列的数据集。我想检查每一行以查看最后3列是否为空。如果所有3个都是空的,我想删除该行。我目前正试图在VBA中做到这一点,但我是一个编程新手,发现自己完全不知所措。在Excel中删除一组3列中的缺失数据
我写的伪代码如下:
For Row i
If(Col 1 & Col 2 & Col 3) = blank
Then delete Row i
Move on to next Row
假设你有至少一行是始终填写,您可以使用以下命令:
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的FOR LOOP从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(),改变的是,如果满足条件的行被删除,并通过改变什么循环。
下面是另一个答案,假设您的最后三列以“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
对不起,此代码不起作用。删除第一行后,行数会发生什么变化? – Comintern
我会去像如下
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
@mathvxn,你通过它吗? – user3598756
我真的想出了一个使用JMP的解决方案。一旦找到合适的工具,这很简单! – mathvxn
有如何基于此特定条件删除行的例子不胜枚举。 [这个答案](http://stackoverflow.com/q/37011632/4088852)例如在'If'条件下只需要一对'And's。 – Comintern
空字符串是否被视为“空单元格”?是“空”的单元格的*值*或“空”的任何单元格*实际*空的,即使没有公式在其中?如何检查“空”是非常不同的,这取决于你如何澄清“空”的含义。 –
空的含义没有包含在单元格中。没有空格,没有数据,什么都没有。 – mathvxn