2016-11-08 74 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

沒問題。 :) –