我正在嘗試使用 vba 在 excel 中的日期范圍之間進行過濾。它不作業。
但是,當我執行手動過濾器時,它可以作業。所以我記錄了宏并應用了相同的代碼。再次,它沒有作業。
檔案中的日期格式如下:

假設我試圖過濾掉 2021 年 7 月 1 日至 31 日。
這是我的代碼不起作用:A 列中的日期。
startDT = ActiveSheet.txtStartDT.Text '01-Jul-2021
endDT = ActiveSheet.txtEndDT.Text '31-Jul-2021
For Each srcWsht In srcWbk.Worksheets
lastSrcRow = srcWsht.Range("A1").End(xlDown).Row
srcWsht.Range("A2:A" & lastSrcRow).Replace What:="'", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
srcWsht.Range("A2:A" & lastSrcRow).NumberFormat = "dd-MM-yyyy"
srcWsht.Range("A1:O" & lastSrcRow).AutoFilter Field:=1, Criteria1:=">=" & CDate(startDT), Operator:=xlAnd, Criteria2:="<=" & CDate(endDT), visibledropdown:=True
srcWsht.Range("A2:O" & lastSrcRow).SpecialCells(xlCellTypeVisible).Copy
wshtData.Range("A" & lastDataRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
lastDataRow = wshtData.Range("A2").End(xlDown).Row 1
Next srcWsht
uj5u.com熱心網友回復:
您的過濾器需要一個數值來過濾。但是,如果您像在其中一樣將 aString與 a連接,它將隱式地將您的數字日期轉換為字串以連接它。根據您在作業系統中設定的默認日期格式(我的是),這將導致類似的東西不被視為日期,而是作為計算公式,它將減去和從您的過濾器執行,這不是您想要的.Date">=" & CDate(startDT)yyyy-mm-dd">=2021-07-01"07012021>=2013
因此,通過將您Date轉換為Double類似的日期,CDbl(CDate(startDT))您可以將日期2021-07-01轉換44378為存盤在單元格中的日期的實際數值。現在您的過濾器可以>=44378了,這將起作用
srcWsht.Range("A1:O" & lastSrcRow).AutoFilter Field:=1, Criteria1:=">=" & CDbl(CDate(startDT)), Operator:=xlAnd, Criteria2:="<=" & CDbl(CDate(endDT)), visibledropdown:=True
Strings請注意,如果以 . 開頭,則您的值是(看起來像日期的文本) '。如果您現在洗掉'Excel 會將它們轉換為數字日期(以便您可以計算和過濾它們)。但 Excel 會猜測格式。因此,如果它們是dd-MMM-yyyyExcel 很清楚它是哪種格式,并且會正確猜測,但要小心字串01/05/2022,例如 Excel 無法知道這是dd/mm/yyyy或mm/dd/yyyy. 如果您讓 Excel 轉換,那么有 50/50 的機會判斷錯誤或正確!
如果是這種情況,您需要將看起來像日期的字串拆分為日、月和年,并用于DateSerial(Year, Month, Day)將其轉換為真實的數字日期。通過這種方式,您可以定義哪種格式dd/mm/yyyy或mm/dd/yyyy您的字串,并且您不會讓 Excel 猜測(并且可能會想出錯誤的格式)。
01-May-2021如果您的月份名稱是英文但您在另一個本地化系統中作業(就像我在德語中所做的那樣),您可能還需要這樣做。因為德語 Excel 不知道如何轉換May為月份,因為在德語中它是Mai. 因此 Excel 無法自動轉換,您也需要使用自己的函式對其進行拆分和轉換(或者它只能在英文 Excel 中使用)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/485426.html
