【发布时间】:2021-05-15 05:23:54
【问题描述】:
我有下面的代码来过滤一张纸上的数据和另一张纸上的标准。代码似乎可以工作,但总是返回空白,不知道为什么。
有人可以帮忙吗?
Sub data_test_2() ' ' data_test_2 Macro ' Dim r As Range, filt As Range, d1 As Long, d2 As Long With Worksheets("LNG_PORT_23_SG") d1 = .Range("A2").Value d2 = .Range("B2").Value With Worksheets("LNG_PORTFOLIO_2023_SG_HIST") .Range("A1").CurrentRegion.AutoFilter field:=9, Criteria1:=">=" & CDate(d1) End With End With End Sub
更新:我现在使用的代码非常适合过滤位,只是似乎无法复制所有过滤后的数据并粘贴到 LNG_PORT_23_SG。我想清除此工作表上单元格 A11 中的所有现有数据,然后复制并粘贴新的过滤数据。
Option Explicit Sub FilterDates() Dim date1 As Long, date2 As Long, date3 As Long date1 = Sheets("LNG_PORT_23_SG").Range("A2").Value2 date2 = Sheets("LNG_PORT_23_SG").Range("B2").Value2 date3 = Sheets("LNG_PORT_23_SG").Range("E2").Value2 With Sheets("LNG_PORTFOLIO_2023_SG_HIST").Range("A1:AC1") On Error Resume Next .AutoFilter 28, ">=" & 1 * date1, 7 .AutoFilter 29, "<=" & 1 * date2, 7 .AutoFilter 9, ">=" & 1 * date3, 7 .AutoFilter Field:=1, Criteria1:=Sheets("LNG_PORT_23_SG").Range("C2").Value, Operator:=xlOr, Criteria2:=Sheets("LNG_PORT_23_SG").Range("C3").Value .SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("LNG_PORT_23_SG").Range("A11") End With On Error GoTo 0 End Sub```
【问题讨论】:
-
工作表
LNG_PORTFOLIO_2023_SG_HIST中的列i是您要过滤的列吗?此外,它是否包含真实日期或日期格式的文本?更重要的是,如果它是一个日期,您甚至不需要CDate,因为 Excel 将它存储为一个数字。 -
请尝试在
Criteria1:=">=" & d1之后添加, Operator:=xlFilterValues -
谢谢 - 删除 cdate 并添加操作员作品!还有一个问题,如果我想添加第二个日期条件来过滤不同的列,我该怎么做?在这种情况下,我希望此列中的日期等于我在另一张表上的单元格 B2 中的标准(因此不小于或大于但完全相同)。这可能吗?
-
恐怕您无法在同一个过滤器上过滤第二列。您必须使用适当的
field编号和Criteria1编写另一个类似的代码行。您可以使用相同的field、Criteria2,但也可以使用两个以上条件的数组。 -
谢谢 - 我确实尝试过,但又回到了完全空白的相同错误。我正在使用下面的日期,其中日期小于或等于单元格 B2 (d2) 中的值。我尝试了几种不同的方法,但不确定我哪里出错了?非常感谢您的帮助!使用 Worksheets("LNG_PORTFOLIO_2023_SG_HIST") .Range("A1").CurrentRegion.AutoFilter field:=9, Criteria1:=">=" & d1, Operator:=xlFilterValues .Range("A1").CurrentRegion.AutoFilter 字段: =29, Criteria2:="
标签: excel vba date variables autofill