excel - 具有日期条件的自动过滤器返回空白

标签 excel vba date variables autofill

我有下面的代码来过滤一张纸上的数据和另一张纸上的标准。代码似乎有效,但总是返回空白,不知道为什么。

有人可以帮忙吗?

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 放在过程的顶部——它会强制声明。

不要使用像 d1d2 这样的变量名,因为这很容易与实际的单元格地址混淆。另外,不要声明您从未使用过的变量。

以下代码已经过测试,可以根据 LNG_PORTFOLIO_2023_SG_HIST 工作表上的 2 个日期列IAC 以及您的来源进行测试和工作对于 LNG_PORT_23_SG 工作表上的单元格 A2B2 的日期。这些单元格的格式应为 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/

相关文章:

mysql - 比较 mySQL 中的多个日期

javascript - 为什么我没有得到正确的时间?

excel - 每日绘图报告轴格式

vba - Excel VBA 使用范围选择整个工作表

excel - 插件 - 此工作簿当前被另一个工作簿引用,无法关闭

excel - 将唯一值从 Excel 填充到 VBA 数组中

javascript - 为什么删除一行会影响下一行?

Excel 数据透视表 : Adding single column in grouped pivot table

c++ - VBA Excel DLL 参数问题 - 第 6 个参数

Excel VBA - 简单平均计算