Excel 如果两列中的任何一列中的数据为空,请删除多行

Excel 如果两列中的任何一列中的数据为空,请删除多行,excel,excel-formula,excel-2010,excel-2007,Excel,Excel Formula,Excel 2010,Excel 2007,我有一个数据集,其中每一行由以下列组成:年份、学院名称、本科生人数和研究生人数 对于每个学院名称,有4行数据(2013-2016年)。如果四年中任何一年的本科生或研究生数量数据缺失,我想删除该学院的所有四行 我该怎么做呢?这应该可以。假设年份字段是数字而不是文本 Sub DeleteColleges() Set rg = ActiveSheet.Range("a2") Do While Not rg = "" If rg.Offset(0, 2) = "" Or

我有一个数据集,其中每一行由以下列组成:年份、学院名称、本科生人数和研究生人数

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


我该怎么做呢?

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

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年的四个值


可能还值得更改代码以查找非数字,而不仅仅是空白单元格

如注释中所述,这是可能的,但需要付出艰苦的努力

=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行相关,第三行与第2-4行相关

公式的第一行使用偏移和小计检查4 X 2个学生编号块,以查看计数是否为8。这场比赛选出了第一所拥有完整数据且之前未被列入名单的大学

第二行使用索引结构来获取不同学院名称的列表,并使用Countif检查它们是否已经列出。ROW($A$1:$A$10)需要改变以应对10多所大学

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


假设所有内容都从第2行开始。

一个合理的直接宏。假设数据是按学院分类的,那么在数据中寻找空白,当你找到一个时,删除四行。您将使用年份字段计算四行块的起始位置。我是VBA的新手,您能告诉我这可能是什么样子吗?是的,数据是按大学和年份排序的。我想这是可能的,但很难通过公式将4行的数据块复制到另一张没有遗漏学生编号的表格上。我认为这是一个相当丑陋的补偿公式。