首页 > 解决方案 > 根据 MS Excel 中同一行(日期和文本)中的 2 个条件删除行

问题描述

SO社区。我有一个显然无法靠自己解决的问题。这是出于自我教育目的,仅与学校作业有关。所以,我有多个列,其中包含不同的值类型。在下面的示例中,有 3 列:

我正在尝试做的 - 基于“日期”和“字母”列删除比例如 29.06.2015 更早的行,同时该日期分配了一个字母“A”。所以,基本上如果日期早于 29.06.2015 并且该行包含字母“A”,它将被删除,如果不是 - 它保持原样。

Date        ID  Letter
12.01.2013  1   A
05.02.2014  2   A
29.06.2015  3   A
04.01.2016  4   A
17.12.2014  5   A
12.01.2013  6   B
05.02.2014  7   B
29.06.2015  8   A
04.01.2016  9   F
17.12.2014  10  F

所以最终的结果应该是这样的:

Date    ID  Letter
29.06.2015  3   A
04.01.2016  4   A
12.01.2013  6   B
05.02.2014  7   B
29.06.2015  8   A
04.01.2016  9   F
17.12.2014  10  F

我一直在寻找解决这个问题的方法,发现了这样的文章还有一些其他的文章,但它们关注的内容略有不同,因为我无法真正思考该怎么做。

标签: vbaexcel

解决方案


试试这个代码

Option Explicit

Sub DeleteOld(ByVal MinDate As Date)
    Dim i As Integer
    i = 2
    Do While CStr(ActiveSheet.Cells(i, 1).Value) <> "" And CStr(ActiveSheet.Cells(i, 2).Value) <> "" And CStr(ActiveSheet.Cells(i, 3).Value) <> ""
        If DateDiff("d", CDate(ActiveSheet.Cells(i, 1).Value), MinDate) > 0 And CStr(ActiveSheet.Cells(i, 3).Value) = "A" Then
            ActiveSheet.Rows(i).EntireRow.Delete
        Else
            i = i + 1
        End If
    Loop
End Sub

Sub TestDeleteOld()
    Call DeleteOld(DateSerial(2015, 5, 29))
End Sub

推荐阅读