Фильтрация данных в функции, скажем, 12 месяцев назад, в зависимости от того месяца, в котором мы можем быть, без ручного ввода даты начала и окончания? - PullRequest
0 голосов
/ 23 января 2019

Может ли быть предложена какая-либо помощь, чтобы попытаться изменить приведенный ниже макрос на более автоматизированный.Приведенный ниже макрос будет фильтровать данные в зависимости от даты начала и окончания, введенной вручную.Я хочу избавиться от необходимости вводить даты вручную и поставить код, который позволяет фильтровать данные 12 месяцев назад.Я не могу использовать встроенный годовой фильтр в Excel, потому что;Предположим, что мы находимся в середине года, и я фильтрую в течение 12 месяцев, это действительно отфильтрует данные за весь 2018 год, но мой запрос будет фильтровать 12 месяцев с прошлого месяца до фактического месяца, в котором мы можем быть. ЕслиЯ не был достаточно ясен, я буду счастлив, чтобы быть точным для любого с любой идеей.Заранее благодарю за любую помощь

Это для Excel 2010 VBA.Я попытался сделать некоторые исследования, но безрезультатно, и любое решение заставляет код выдавать ошибку.Но я все еще ищу решения

Sub filter_()
    Sheets("data1 ").Select

    MsgBox "12 months filter"

    lngStart = Application.InputBox("Enter start date of interest as dd/mm/yyyy", Type:=1 + 2)
    lngEnd = Application.InputBox("Enter end date of interest as dd/mm/yyyy", Type:=1 + 2)
    Sheets("RBT-RAT ").Select
    Range("Tableau1[[#Headers],[Date dernier freinage]]").Select
    ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=30, _
    Criteria1:=">=" & lngStart, _
    Operator:=xlAnd, _
    Criteria2:="<=" & lngEnd
End sub

Я ожидаю, что код сможет работать без необходимости вручную вводить даты начала и окончания, в течение которых фильтр должен применяться, и все еще фильтровать в функции 12 месяцев.с какого времени года, но без применения фильтра текущего месяца.Фактический макрос, размещенный чуть ниже, делает это, но не автоматически.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Вы можете использовать функции DateAdd и DateSerial .

Представьте, что сегодня 2019-01-23. Тогда ...

DateSerial(Year(Date), Month(Date), 1)

… даст вам первый день текущего месяца 2019-01-01. Если затем мы вычтем 1 день из этого, используя…

LastDayOfPreviousMonth = DateAdd("d", -1, DateSerial(Year(Date), Month(Date), 1))

… мы получаем последний день предыдущего месяца 2018-12-31, который должен быть вашей конечной датой. И если мы вычтем 12 месяцев с этой даты ...

StartDate = DateAdd("m", -12, LastDayOfPreviousMonth)

… вы получите дату начала 2017-12-31.


Sub filter_()

    MsgBox "12 months filter"

    Dim LastDayOfPreviousMonth As Date
    LastDayOfPreviousMonth = DateAdd("d", -1, DateSerial(Year(Date), Month(Date), 1))

    Dim StartDate As Date
    StartDate = DateAdd("m", -12, LastDayOfPreviousMonth)

    Sheets("RBT-RAT ").ListObjects("Tableau1").Range.AutoFilter Field:=30, _
        Criteria1:=">=" & StartDate, _
        Operator:=xlAnd, _
        Criteria2:="<=" & LastDayOfPreviousMonth
End Sub
0 голосов
/ 23 января 2019
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=30, _
    Criteria1:=">=" & date-365, _
    Operator:=xlAnd, _
    Criteria2:="<=" & date

Или вы можете использовать функцию dateadd("yyyy",-1,date), чтобы быть более точным, измените период, на который вы хотите посмотреть

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