Страницы: 1
RSS
Использование значения переменных в фильтрах в коде vba, Как использовать переменные если необходимо написать код vba с применением фильтра
 
Добрый день! Хелп господа программеры и просто умные :) очень нужна ваша профессиональная помощь!
пишу код vba
Пользователь на листе «Титул» в ячейке A1 пишет год, например 2025
далее это значение присваивается переменной g1, а переменные g2,g3,g4, g 4 вычисляются +1, +2,+3,+4
В результате получаем значения переменных это 2025,2026,2027,2028,2029
теперь мне необходимо в коде VBA настроить фильтр сразу по всем этим пяти переменным. Т.е. что ты столбец где куча данных от Рождества Христова до конца жизни Байдена отфильтровплись только эти года.
в столбце точно цифры целые простые цифры. Проверяла через =, выдаёт Истина.
макрос написала, но он выдает пустую таблицу, ничего не фильтруется совсем.
подскажите что я не так сделала? Как то в фильтре по особеннному надо переменные указывать?

Sub test1()

  Dim g1 As Long

   Dim g2, g3, g4, g5 As Long

   ' в ячейке A1 на листе "Титул" написала год начала 2025 например

   g1 = ThisWorkbook.Worksheets("Титул").Range("A1").Value

   g2 = g1 + 1

   g3 = g1 + 2

   g4 = g1 + 3

   g5 = g1 + 4

    'задаю занчение в ячейке А1 = 2025

    'макрос присваивает переменным 2025,2026 и т.д

    'в столбце 250 указаны цифры 2025,2026 и т.д

    'Проверила даже совпадают ли данные в чейке A1 и в столбце который фильтруется

    ' значение A1 = 2025 = сначению в ячейки в 250м столбце, выдают ИСТИНА

   

   

   ActiveSheet.Rows(2).AutoFilter Field:=250, Criteria1:=Array( _

                            g1, g2, g3, g4, g5), _

                                Operator:=xlFilterValues

   

   

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

       

                           

End Sub

 
Файл-Пример приложите. Как есть - Как надо
Согласие есть продукт при полном непротивлении сторон
 
Попробуйте сначала для одного значения g1
Код
Criteria1:= _
        "=" & Replace(CDbl(Range("A1")), ",", ".")

Код
ActiveSheet.Range("A3:B14").AutoFilter Field:=2, Criteria1:="=" & CDbl(g1)

а вот что записал макрорекордер
Код
    ActiveSheet.Range("$A$2:$B$14").AutoFilter Field:=2, Criteria1:=Array( _
        "2025", "2026", "2027", "2028"), Operator:=xlFilterValues
Изменено: Kuzmich - 19.03.2024 14:11:34
 
В файле Макрос и таблица как получается и как должно быть  
 
Когда в коде написан год Тогда все работает, а вот когда года меняешь на переменные то не работает.
при этом если фильтр писать только на один год, то работает даже с переменной
g1 например
 
.autoFilter Field:=2, criterial:=g1 так работает, таблица фильтруется по тому году который указан в ячейке А1

а если массивом
.autoFilter Field:=2, criterial:=Array(_
g1,g2,g3), Operator:=xlfilterValues
 Не работает  
 
String
Код
Sub test1()
    Dim g2 As String, g3 As String, g4 As String, g5 As String
    g1 = ThisWorkbook.Worksheets("Титул").Range("A1").Text
    g2 = g1 + 1
    g3 = g1 + 2
    g4 = g1 + 3
    g5 = g1 + 4
    ActiveSheet.Rows(2).AutoFilter Field:=2, Criteria1:=Array( _
                             g1, g2, g3, g4, g5), _
                                 Operator:=xlFilterValues
End Sub
Изменено: Тимофеев - 19.03.2024 15:06:41
 
Да!
со string сработало! Спасибо вам большое. Получается тип переменной должен был быть текстом. Хотя это цифры.  
 
Цитата
Blueyed: Получается тип переменной должен был быть текстом. Хотя это цифры.
ну дык
Цитата
Kuzmich: а вот что записал макрорекордер
… Criteria1:=Array("2025", "2026", "2027", "2028"), Operator:=xlFilterValues
и тут это прекрасно видно. Всё, что в кавычках — текст.

Вообще, с датой/временем и прочими числами с форматированием, нужно очень повозиться, чтобы отфильтровать. Проще всего, в этом случае, использовать доп. столбец, наполнить его ячейки напротив фильтруемых значений (например, буквой "f") и отфильтровать по нему (по этой букве).
А ещё не получится передать в массиве фильтрации строки длиннее 255 символов. Только одну можно.

Расширенный фильтр проще в этом плане, но там других заморочек куча.
Я использую доп. столбец для фильтрации кодом VBA.
Изменено: Jack Famous - 19.03.2024 19:01:17
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Ругаться не стал, но работает

Sub tester()
Dim ar(4) As String
   g1 = ThisWorkbook.Worksheets("Титул").Range("A1").Value
   ar(0) = (g1)
   ar(1) = (g1 + 1)
   ar(2) = (g1 + 2)
   ar(3) = (g1 + 3)
   ar(4) = (g1 + 4)
   Sheets(2).Cells(2, 1).AutoFilter Field:=2, Criteria1:=ar, _
                                Operator:=xlFilterValues
End Sub
 
del
Изменено: Jack Famous - 20.03.2024 09:50:28
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Согласен -полный del, а может даже полный ban.
А вответ тишина.  
Изменено: LAD - 21.03.2024 06:30:34
Страницы: 1
Наверх