Excel VBA дата автофильтр - PullRequest
1 голос
/ 30 января 2020

Довольно простой вопрос, с которым мне, похоже, приходится бороться.

У меня есть 2 столбца. В column1 есть даты, в которых каждая ячейка является днем ​​после предыдущего. столбец 2 иногда содержит данные. Мне нужно применить автофильтр, чтобы показать все даты, кроме 15 и 26 числа месяца для столбца 1 и все пустые ячейки в столбце 2. Я могу сделать фильтр column2 с кодом

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

, но я не могу понять, как фильтровать столбец 1.

любая помощь будет оценена.

Спасибо.

1 Ответ

1 голос
/ 30 января 2020

мне нужно применить автофильтр, чтобы показать все даты, кроме 15 и 26 числа месяца для столбца 1

Вы можете достичь желаемого, используя массив соответствующих дат.

Logi c: создать массив и затем использовать параметр 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

В действии

enter image description here

Если бы я мог заставить его показывать только 15-е и 26-е, это работало бы так же, как и я, фильтруя для удаления неиспользованных дат. - Мэтью Уилкокс 1 час go

Поменяйте код Case на Select Case. Попробуй;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...