【问题标题】:Deleting rows that do not match first column criteria删除与第一列条件不匹配的行
【发布时间】:2018-02-20 20:39:27
【问题描述】:

我有下表:

Date        Value
-------------------
1/2/1970    100
1/5/1970     99.99
1/6/1970    100.37
1/7/1970    100.74
1/8/1970    101.26
1/9/1970    100.74
1/12/1970   100.79
1/13/1970   101.27
1/14/1970   101.95
1/15/1970   101.97
1/16/1970   101.76
1/19/1970   102.21
1/20/1970   102.70
1/21/1970   102.00
1/22/1970   101.46
1/23/1970   101.49
1/26/1970   100.97
1/27/1970   101.45
1/28/1970   101.70
1/29/1970   102.08
1/30/1970   102.19
2/2/1970    102.02
2/3/1970    101.85
2/4/1970    101.69
2/5/1970    101.69
2/6/1970    101.66
2/9/1970    102.64

我需要删除日期不是该月的第二天的所有行,我设计了以下条件但我不确定如何使用它:

=IF(A2<>EOMONTH(A2-1,2), B2)

但是,当我将该公式应用于 C 列时,它根本不起作用。我不确定我做错了什么。

【问题讨论】:

  • 如果你想测试日期不是每月的第二天,你的意思是Day(A2) <> 2
  • =IF(DAY(A2)=2,0,1) 添加到 C 列(填写所有数据)过滤器 where = 0 突出显示所有包含数据的行。右键删除,然后删除过滤器。剩下的行将只剩下第 2 天。
  • 我试过了,但是当我将它应用到 C 列时,输出都是 1/0/1900 或 1/1/1900
  • @Muffinman 然后将该列的格式更改为“常规”,设置为短日期以及获得该输出的原因。

标签: excel


【解决方案1】:

运行这个简短的宏(使用 neilsen 的测试)

Sub RowKiller()
    Dim i As Long, N As Long, d As Date
    N = Cells(Rows.Count, "A").End(xlUp).Row
    For i = N To 2 Step -1
        d = Cells(i, 1).Value
        If Day(d) <> 2 Then Cells(i, 1).EntireRow.Delete
    Next i
End Sub

将产生:

您可以手动使用 AutoFilter 来获得相同的结果。

【讨论】:

  • 什么是“尼尔森测试”?
  • Chris Neilsen 在这个问题的第一条评论中提到的测试
猜你喜欢
  • 1970-01-01
  • 2014-07-27
  • 2013-02-17
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 2016-12-31
  • 1970-01-01
相关资源
最近更新 更多