根据MS Excel中同一行(日期和文本)中的2个条件删除行

时间:2018-09-17 12:13:27

标签: excel vba excel-vba

SO社区。我有一个我显然无法独自解决的问题。这仅出于自学目的,仅涉及学校作业。因此,我有多个列,其中包含不同的值类型。在下面的示例中,共有3列:

  • 第1列“日期”-日期;
  • 第2列“ ID”-数字;
  • 第3栏“字母”-文本。

我要执行的操作-基于“日期”和“字母”列,删除一行早于例如2015年6月29日的行,同时在该日期中分配了字母“ A”。因此,基本上,如果日期早于2015年6月29日,并且该行包含字母“ 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

我一直在寻找解决方案,找到了thisthis之类的文章以及其他几篇文章,但它们专注于稍有不同的事情,因为我实在无法解决问题周围该怎么做。

1 个答案:

答案 0 :(得分:1)

尝试此代码

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