【问题标题】:Excel - Delete rows if formula returns ""Excel - 如果公式返回“”,则删除行
【发布时间】:2015-03-16 22:08:46
【问题描述】:

我使用的论坛是

=IF(E7<30,E7,"")

编辑:更具体地说:

 =IF(E7<30,CONCATENATE(A7,B7,C7,"-",TEXT(D7,"hh:mm:ss"),"-",E7),"")

这给我留下了 288000 行中的很多空白行。我希望能够一起查看所有具有返回值的单元格。而不必滚动浏览所有这些。我已经尝试使用查找和替换方法,但当然单元格仍然包含公式,而不是它显示的实际返回值。

示例。

15  Mar 2015    00:23:00    100.024         
15  Mar 2015    00:24:00    90.033          
15  Mar 2015    00:25:00    80.142          
15  Mar 2015    00:26:00    70.577          
15  Mar 2015    00:27:00    61.508          
15  Mar 2015    00:28:00    53.056          
15  Mar 2015    00:29:00    45.312          
15  Mar 2015    00:30:00    38.368          
15  Mar 2015    00:31:00    32.347          
15  Mar 2015    00:32:00    27.443          15Mar2015-00:32:00-27.443
15  Mar 2015    00:33:00    23.934          15Mar2015-00:33:00-23.934   
15  Mar 2015    00:34:00    22.117          15Mar2015-00:34:00-22.117
15  Mar 2015    00:35:00    22.111          15Mar2015-00:35:00-22.111
15  Mar 2015    00:36:00    23.695          15Mar2015-00:36:00-23.695
15  Mar 2015    00:37:00    26.43           15Mar2015-00:37:00-26.43
15  Mar 2015    00:38:00    29.895          15Mar2015-00:38:00-29.895

【问题讨论】:

  • 为什么不在 E7=30 的值,然后按照this 删除所有具有可见单元格的行。然后删除过滤器

标签: excel formula


【解决方案1】:

这对 VBA 来说是一项更好的工作——如果你想获取一个列表并压缩它,你将不得不使用一个数组函数——这非常重。这个函数将以一种压缩的方式返回你的行——但也会打破你的工作簿 288,000 行 --

CTRL SHIFT 回车 ->

   =SMALL(IFERROR(1/($E$5:$E$20<30)*ROW($E$5:$E$20),""), ROWS($F$4:F4))

这只会给你行号 - 所以你可以在它旁边写一个函数来引用这样的结果:

=CONCATENATE(INDIRECT("A"&F5),INDIRECT("B"&F5),INDIRECT("C"&F5),"-",TEXT(D5,"hh:mm:ss"),"-",INDIRECT("E"&5))

index 函数也可以工作。VBA 确实是解决这个问题的方法。

如果您倾向于使用公式来执行此操作,则可以通过创建与数据集相邻的 if 语句来摆脱困境,如下所示: (公式假定在 F 列中)

 if(E5<30, max(f$4:f$4)+1, "")

然后做一个这样的索引公式

 index(A$5:A$10000, match(rows(l$5:l5), $F$5:$F$10000, 0))

然后把这个公式继续下去

然后在上面运行你的 concat ...

不建议这样做。如果您想要 VBA 答案,请告诉我。

【讨论】:

    【解决方案2】:

    我们可以做一个捷径来运行这个例程(它假设你的数据从 A2 btw 开始)。让我知道。

    Sub Under30()
    row1 = 2 ''starting row number
    row2 = row1
    Do While Cells(row1, 1) <> ""
            If Cells(row1, 5) < 30 Then
                'if e column is less than 30
                myTime = Application.WorksheetFunction.Text(Cells(row1, 4),"hh:mm:ss")
                Cells(row2, 6) = Cells(row1, 1) & Cells(row2, 2) & Cells(row1, 3) & "-" & myTime & "-" & Cells(row1, 5)
                row2 = row2 + 1
            End If
                row1 = row1 + 1
    Loop
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 2021-01-11
      • 1970-01-01
      相关资源
      最近更新 更多