【问题标题】:excel vba date autofilterexcel vba日期自动过滤器
【发布时间】:2020-01-30 13:39:21
【问题描述】:

我似乎正在努力解决的相当简单的问题。

我有 2 列。 column1 中有日期,其中每个单元格是前一天的后一天。第 2 列偶尔会有数据。我需要应用自动过滤器显示除第 1 列的每月 15 日和 26 日之外的所有日期以及第 2 列中的所有空白单元格。我可以用代码做 column2 过滤器

ws1.Range(Cells(4, 1), Cells(x, 2)).AutoFilter field:=2, Criteria1:="="

但我不知道如何过滤第 1 列。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 您是否偶然尝试过宏记录器?在这里应该会有所帮助。
  • 我做到了,它给了我大量代码,通过单独选择每隔一个日期手动选择除 15 日和 26 日以外的所有日期。
  • 嗯 - 抱歉,我更仔细地重新阅读了您的问题。除了 15 日和 26 日之外,每天都获得可能并非易事。
  • 如果我能让它只显示 15 日和 26 日,那将与即时过滤以删除未使用的日期一样有效。

标签: excel vba


【解决方案1】:

我需要应用自动过滤器显示除第 1 列的每月 15 日和 26 日以外的所有日期

您可以使用一系列相关日期来实现您想要的。

逻辑:创建一个数组,然后使用Criteria2参数进行过滤。例如,如果你录制一个宏,你会得到类似Criteria2:=Array(2, "1/1/2020", 2, "1/4/2020", 2, "1/6/2020").... 数组的第一维是时间段组。 2 适用于天。

这是你正在尝试的吗?

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim rng As Range
    Dim lRow As Long, i As Long
    Dim DateArray As Variant
    Dim tmpDateString As String: tmpDateString = "2"

    '~~> Set your worksheet here
    Set ws = Sheet2

    With ws
        '~~> Remove any autofilter
        .AutoFilterMode = False

        '~~> Find the last row
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> Check if there is any data
        If lRow > 1 Then
            '~~> Construct your range
            Set rng = .Range("A1:A" & lRow)

            '~~> Create a string with relevant dates
            For i = 2 To lRow
                Select Case Day(.Range("A" & i).Value)
                Case 15, 16
                Case Else
                    tmpDateString = tmpDateString & "," & .Range("A" & i).Value & ",2"
                End Select
            Next i
        End If

        '~~> Split and store in an array
        tmpDateString = Mid(tmpDateString, 1, Len(tmpDateString) - 2)
        DateArray = Split(tmpDateString, ",")

        '~~> Autofilter using an array
        rng.AutoFilter Field:=1, Criteria2:=DateArray, Operator:=xlFilterValues
    End With
End Sub

行动中

如果我可以让它只显示 15 日和 26 日,那将与即时过滤以删除未使用的日期一样有效。 – 马修·威尔科克斯 1 小时前

在Select Case 中交换Case 代码。试一试;)

【讨论】:

    猜你喜欢
    • 2015-11-09
    • 2016-07-17
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2015-10-02
    • 1970-01-01
    相关资源
    最近更新 更多