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这很好。
对不起,很长的描述…我不寻找代码,只是伪代码/逻辑来解决这个问题!
我不寻找代码,只是伪代码/逻辑
在我看来,你只需要以下几点:
- 一个简单的循环遍历每一行,看看结束date。
- 如果结束date过去,则转到步骤3。
- 如果员工只有一条logging,请不要删除,否则请转到步骤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