2017-09-22 161 views
1

我在Excel中有一個可刷新的表,我想通過幾個日期範圍篩選行。每一行都有一個日期和其他信息。Excel - 按日期篩選表結果

我想查找在第一個日期範圍(F1:F2)中且不在第二個日期範圍(H1:H2)中的行。

該表可刷新,並可以更改大小。它目前跨越A3:X6146。該表是一個查詢,因此當使用單獨的日期範圍查找表值時,它將更改大小。

我沒有太多的VBA經驗,所以這個問題讓我絆倒了。有任何想法嗎?

感謝

編輯:

我會盡力使問題更加清晰。

我有一個表,它是通過一個查詢來創建的,該查詢引入了起始日期和結束日期,2016年1月1日和12/31/2017之間的數據。它列出了每次購買一件物品,因此每一件物品都可以多次列出。

我想找到在活動日期範圍的開始和結束日期(單元格F1和F2)之間購買哪些項目(在表格中列出),而不是在非活動日期範圍(單元格H1和H2)之間購買的項目。

Starting Date: 1/1/2016 Active Date Range Start: 3/1/2016 Inactive Date Start: 3/2/2017 

Ending Date: 12/31/2017 Active Date Range End: 3/1/2017  Inactive Date End: 9/22/2017 




item date 
1  9/21/2017 
2  9/20/2017 
3  9/20/2017 
+0

添加具有「MATCH」公式的列在列H中找到F的值,過濾NA。不需要任何VBA。 –

回答

0

是的,我可以告訴你我會做什麼。

創建一個附加列以保留結果值(如果處於日期範圍內或日期範圍外)。然後

dim t() as string, lin as long, linf as long 
linf=Range("F65536").End(xlUp).Row 'or any other more precise way to get the final line 
redim t(1 to linf-2,1 to 1) 

'range dates - are they on the worksheet? 
dim rg_dates as Range,r as range,b as boolean 
set rg_dates=Sheets("xxxx").Range("B1:B4") ' just an example, the range would be B1:C4 but use only the first column - see below 

    For lin=3 to linf 
     b=False 
     For each r in rg_dates 
      If cells(lin,"F").value>= r.Cells(1,1) and cells(lin,"G").Value<=r.Cells(1,2).value then 
      b=true 
      Exit for 
      End If 
     Next r 
     If b then t(lin-2,1)="Y" else t(lin-2,1)="N" 

    Next l 
    Range("Z3:Z" & linf).Value = T 

'然後只是過濾表。

然後會有很多事情要做,以保持它沒有錯誤,以及如何在具體情況下應用它。希望通過我上面寫的內容,您可以瞭解使用VBA可以執行的操作。如果您使用代碼來過濾表格,則可以對用戶執行所有這些操作,爲過濾條件創建額外的列,然後進行過濾,然後刪除整列。