我正尝试使用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
发布于 2022-06-02 07:23:00
筛选器需要一个数字值来筛选。但是,如果您像在String
中一样将一个Date
连接在一起,它将隐式地将您的数字日期转换为一个字符串来连接它。取决于您在操作系统中设置的默认日期格式(我的是yyyy-mm-dd
),这将导致类似于">=2021-07-01"
的结果,它不被认为是日期,而是要计算的公式,它将从2021
中减去07
和01
,而过滤器执行的>=2013
不是您想要的。
因此,通过将Date
转换为像CDbl(CDate(startDT))
一样的Double
,您可以将date 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-yyyy
,Excel非常清楚它是哪种格式,并且会正确地猜测,但是要小心使用像01/05/2022
这样的字符串,其中Excel无法知道这是dd/mm/yyyy
还是mm/dd/yyyy
。如果您让Excel转换,这是一个50/50的机会,使它的错误或正确!
如果是这种情况,则需要将看起来类似日期的字符串拆分为日、月和年,并使用DateSerial(Year, Month, Day)
将其转换为真正的数字日期。这样您就可以定义您的字符串是哪种格式的dd/mm/yyyy
或mm/dd/yyyy
,并且不要让mm/dd/yyyy
猜测(并且可能想错了)。
如果您的月份名称是英语01-May-2021
,但是您在另一个本地化系统中工作(就像我在德语中所做的那样),您可能也需要这样做。因为德国Excel不知道如何将May
转换为一个月,因为在德语中它是Mai
。所以Excel不能自动地转换它,你也需要用你自己的函数进行拆分和转换(否则它只能在英语中发挥出色的作用)。
https://stackoverflow.com/questions/72472031
复制相似问题