我有下面的代码来过滤一张纸上的数据和另一张纸上的标准。代码似乎有效,但总是返回空白,不知道为什么。
有人可以帮忙吗?
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```
最佳答案
只是对您的代码的一些观察。
如果您打算使用变量,请始终将 Option Explicit
放在过程的顶部——它会强制声明。
不要使用像 d1
或 d2
这样的变量名,因为这很容易与实际的单元格地址混淆。另外,不要声明您从未使用过的变量。
以下代码已经过测试,可以根据 LNG_PORTFOLIO_2023_SG_HIST
工作表上的 2 个日期列I
和 AC
以及您的来源进行测试和工作对于 LNG_PORT_23_SG
工作表上的单元格 A2
和 B2
的日期。这些单元格的格式应为 date
。
Option Explicit
Sub FilterDates()
Dim date1 As Long, date2 As Long
date1 = Sheets("LNG_PORT_23_SG").Range("A2").Value2
date2 = Sheets("LNG_PORT_23_SG").Range("B2").Value2
With Sheets("LNG_PORTFOLIO_2023_SG_HIST").Range("A1:AC1")
.AutoFilter 9, ">=" & 1 * date1, 7
.AutoFilter 29, "<=" & 1 * date2, 7
End With
End Sub
编辑
根据您对附加条件的最新评论 - 以及将过滤后的数据复制到 LNG_PORT_23_SG
工作表的愿望,请参阅下面的修改后的代码。
注意选择是否复制带或不带标题的选项 - 只需根据需要取消注释/删除。另外,请不要使用 On Error Resume Next
- 它可以隐藏各种问题...
Option Explicit
Sub FilterDates()
Dim date1 As Long, date2 As Long, date3 As Long, x, y
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
x = Sheets("LNG_PORT_23_SG").Range("C2").Value2
y = Sheets("LNG_PORT_23_SG").Range("C3").Value2
Application.Goto Sheets("LNG_PORTFOLIO_2023_SG_HIST").Range("A1")
With Sheets("LNG_PORTFOLIO_2023_SG_HIST").Range("A1").CurrentRegion
.AutoFilter 1, x, 2, y, 7
.AutoFilter 28, ">=" & 1 * date1, 7
.AutoFilter 29, "<=" & 1 * date2, 7
.AutoFilter 9, ">=" & 1 * date3, 7
.Copy Sheets("LNG_PORT_23_SG").Range("A11") '<~~ use this line to copy including headings
'.Offset(1).Copy Sheets("LNG_PORT_23_SG").Range("A11") '<~~ OR this line to exclude headings
.AutoFilter
End With
Application.Goto Sheets("LNG_PORT_23_SG").Range("A1")
End Sub
关于excel - 具有日期条件的自动过滤器返回空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66155260/