如果2列中的任何一列中的数据为空,则删除多行

时间:2018-04-28 10:29:42

标签: excel excel-formula excel-2010 excel-2007

我有一个数据集,其中每一行都包含以下列:年份,大学名称,本科学生人数和研究生人数。

对于每个大学名称,有4行数据(2013-2016年)。如果有4年中任何一年的本科学生人数或研究生人数缺失数据,我想删除该学院的所有4行。

我将如何做到这一点?

2 个答案:

答案 0 :(得分:1)

这应该这样做。假设年份字段是数字而不是文本。

Sub DeleteColleges()
    Set rg = ActiveSheet.Range("a2")

    Do While Not rg = ""
        If rg.Offset(0, 2) = "" Or rg.Offset(0, 3) = "" Then
            yearRow = rg.Value - 2012   'see note 1
            Set rg = rg.Offset(5 - yearRow, 0)  'see note 2
            rg.Offset(-4, 0).Range("a1:a4").EntireRow.Delete
        Else
            Set rg = rg.Offset(1, 0)
        End If
    Loop
End Sub

注1:这会计算我们所处的年份行,从2013年的第1行到2016年的第4行

注意2:在我们删除行之前,范围(' rg')被移动到下一个学院,否则当我们删除行并且宏将失败时rg将变为null

注3:代码需要比这更强大。至少我会确保数据行的数量是四的倍数(其他任何东西都表示数据有问题),而A列只包含2013年至2016年的四个值。

也许值得更改代码以寻找非数字而不仅仅是空白单元

答案 1 :(得分:0)

正如评论中所提到的,这可能是通过公式而努力的

=IFERROR(IF(MOD(ROW(),4)=2,INDEX(A:A,MATCH(1,(SUBTOTAL(2,OFFSET($C$2,(ROW($A$1:$A$10)-1)*4,0,4,2))=8)*
(COUNTIF($I$1:$I1,INDEX($B:$B,N(IF({1},(ROW($A$1:$A$10)-1)*4+2))))=0),0)*4-2),
INDEX(A:A,MATCH($I1,$B:$B,0)+MOD(ROW()-2,4))),"")

公式的前两行与4条记录的第1行有关,第3条与第2-4条有关。

公式的第一行使用Offset和Subtotal来检查4 X 2学生编号块,看看计数是否为8.匹配选择第一个具有完整数据并且之前未列出的学院。< / p>

第二行使用Index构造来获取不同学院名称的列表,并检查它们是否已使用Countif列出。 ROW($ A $ 1:$ A $ 10)需要改变才能与10多所大学打交道。

公式的第三行使用当前行上方行中的名称查找匹配的大学记录,并从原始数据中的相应行和列中选取数据。

enter image description here

假设一切都从第2行开始。