Excel-vba比较,条件,删除

我有一个Excel文件,其中包含针对不同同事的活动,如下所示:

  • 1 1月2016 || 1十月2016 || 100%|| 同事A
  • 1二月2014 || 31十二月2014 || 100%|| 同事B
  • 1 1月2016 || 1好2016 100%|| 同事B
  • 1好2016 31十二月2016 || 80%|| 同事B
  • 1 nov 2016 || 10十月2016 100%| 同事B
  • 1十月2016 || 1 1月2017 || 50%|| 同事B

开始date|| 结束date|| 用法%|| 同事

现在我想看看人们现在正在从事何种工作。

因此,删除结束date的行是过去的,除非这是同行的唯一行,因为那么我想把这行看作是“从什么时候开始新工作”的一种措施。

但是当时的同事B呢,有几件事情要做。 我将如何去除旧的东西,但保留现在正在处理的两条线和他将在1月12日之前工作的线?

他们可以有一个使用百分比>!00这很好。

对不起,很长的描述…我不寻找代码,只是伪代码/逻辑来解决这个问题!

我不寻找代码,只是伪代码/逻辑

在我看来,你只需要以下几点:

  1. 一个简单的循环遍历每一行,看看结束date。
  2. 如果结束date过去,则转到步骤3。
  3. 如果员工只有一条logging,请不要删除,否则请转到步骤4。
  4. 如果结束date过去, 并且有多个logging – 删除。

我将如何去除旧的东西,但保留现在正在处理的两条线和他将在1月12日之前工作的线?

我相信只要testing结束date是否过去就足够了每个场景?


在伪代码,可能看起来像:

For i = [num_rows] If end_date < today Then If [COUNTIF(colleague_column, colleague)] > 1 Then rows(i).delete End If End If Next 

要么

 For i = [num_rows] If end_date < today And [COUNTIF(colleague_column, colleague)] > 1Then rows(i).delete End If Next 

或者在实际的 VBA中(我们会在删除行的情况下向后循环),假设你的数据在列A:D中没有标题:

 For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If CDate(Cells(i, 2)) < Date And WorksheetFunction.CountIf(Range("D:D"), Cells(i, 4).Value) > 1 Then Rows(i).EntireRow.Delete Shift:=xlUp End If Next