2016-11-08 78 views
1

我有一个Excel与不同的同事活动的文件,像这样:Excel的VBA比较,条件,删除

  • 2016年1月1日|| 1十月2016 || 100%||同事甲
  • 2014年2月1日|| 2014年十二月31日|| 100%||同事B
  • 1一月2016 1好2016 | 100%||同事B
  • 1年2016年2016年十二月31日|| 80%||同事B
  • 1 nov 2016 || 10十月2016 || 100%|同事B
  • 1 dec 2016 2016 1 1月2017 || 50%||同事乙

开始日期||结束日期||用法%||同事

现在我想是看什么人现在正在研究/时可供他们什么%/因为当他们已经面世。

因此,删除结束日期的行是过去的行为,除非这是同事的唯一行,因为那么我希望将该行看作是“从何时开始可用于新工作”的度量。

但后来同事B为例,有几件事情去。我将如何去除旧的东西,但保留他现在正在工作的两条线和他将在1月12日工作的线?

他们可以有>!这就是00罚款使用率%。

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

+0

好的将编辑,显然只是从我的头顶键入样品线。感谢您的注意。 – Lodewijk

回答

1

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

在我看来,你只需要如下:

  1. 一个简单的循环来遍历每个行和看看结束日期。
  2. 如果结束日期是过去,然后转到步骤3.
  3. 如果雇员只有一个记录,不要删除,否则转到步骤4
  4. 如果结束日期是在过去, 有多个记录 - 删除。

我怎么会去删除旧的东西,但保留他的两条线; S现在工作的+,他将致力于为12月1日的行?

我相信只要测试结束日期是否过去就足够了每个场景?


在伪代码可能看起来像:

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 
+0

抱歉让你久等了。你的回答恰到好处。我的代码出来是这样的: http://pastebin.com/zaSPb4v1 我不能因为字符限制的代码粘贴到这条评论... 顺便说一句,在升档似乎是不必要,因为它已经做到了 - 将单元格向上移动。 – Lodewijk

+0

差点忘了说谢谢!那谢谢啦!将您的答复标记为正确答案。 – Lodewijk

+0

没问题。 :) –