Excel vba比较、条件、删除

Excel vba比较、条件、删除,vba,excel,Vba,Excel,我有一个Excel文件,其中包含针对不同同事的活动,如下所示: 2016年1月1日| | 2016年12月1日| | 100%| |同事A 2014年2月1日| | 2014年12月31日| | 100%| |同事B 2016年1月1日| | 2016年12月1日| | 100%| |同事B 1 okt 2016 | | 2016年12月31日| | 80%| |同事B 2016年11月1日| | 2016年12月10日| | 100%|同事B 2016年12月1日| 2017年1月1日| 5

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

  • 2016年1月1日| | 2016年12月1日| | 100%| |同事A
  • 2014年2月1日| | 2014年12月31日| | 100%| |同事B
  • 2016年1月1日| | 2016年12月1日| | 100%| |同事B
  • 1 okt 2016 | | 2016年12月31日| | 80%| |同事B
  • 2016年11月1日| | 2016年12月10日| | 100%|同事B
  • 2016年12月1日| 2017年1月1日| 50%|同事B
开始日期| |结束日期| |使用率%| |同事

现在我想看看人们现在在做什么/他们什么时候有空/他们什么时候有空

因此,删除结束日期为过去的行,除非这是同事的唯一一行,因为这样我想将该行视为“他从何时起可以从事新工作”的度量

但是,例如,同事B有几件事要做。我该如何移除旧东西,但保留他说的两条线;What’他现在正在做+他将在12月1日开始做的那一行

它们可以使用%的>!好的

抱歉,描述太长了。。。我不是在寻找代码,只是psuedo代码/逻辑来解决这个问题

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

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

  • 一个简单的循环,遍历每一行并查看结束日期
  • 如果结束日期为过去,则转至步骤3
  • 如果员工只有一条记录,请不要删除,否则请转至步骤4
  • 如果结束日期在过去,有多条记录-删除
  • 我该如何移除旧东西,但保留他说的两条线;What’他现在正在做+他将在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 
    
    对于i=[num\u行]
    如果结束日期<今天,则
    如果[COUNTIF(同事列,同事)]>1,则
    第(i)行。删除
    如果结束
    如果结束
    下一个
    

    对于i=[num\u行]
    如果结束日期<今天且[计数(同事列,同事)]>1然后
    第(i)行。删除
    如果结束
    下一个
    

    或者在实际的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
    
    对于i=单元格(Rows.Count,1)。结束(xlUp)。行到1步骤-1
    如果CDate(单元格(i,2))<日期和工作表function.CountIf(范围(“D:D”),单元格(i,4.Value)>1,则
    行(i).EntireRow.Delete Shift:=xlUp
    如果结束
    下一个
    
    Ok将进行编辑,很明显,我只是从头顶输入了样本行。谢谢你的注意。抱歉让你久等了。你的回答恰到好处。我的代码如下:由于字符限制,我无法将代码粘贴到此注释中。。。顺便说一句,上移似乎是不必要的,因为它已经做到了——上移单元格。几乎忘了说谢谢!所以,谢谢!将您的答复标记为正确答案。没问题。:)
    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