В Sheet1 на листе Excel, который у меня есть в Range ("B6"), у меня есть код, так что это может быть один код в этом месяце, но также может быть еще 3 кода, добавленных ниже в следующем, и это может быть просто два новых в следующем месяц, поэтому значения будут продолжать меняться, а число может варьироваться от 1 до любого, что будет динамическим. На основе этих значений на следующем листе 2 дату необходимо отфильтровать. Итак, в Sheet2 у меня есть три столбца, один - Sl_No. один ME_Code (это то, что нужно отфильтровать на основе данных Листа 1) и цены

Итак, я новичок в VBA и попробовал приведенный ниже код, который не работает, когда есть несколько кодов, которые я пытаюсь добавить в массив автофильтров в VBA.

Вот мой код, который не работает, когда я пытаюсь использовать вариант else, может ли кто-нибудь помочь мне, я пробовал несколько вариантов из самого StackOverflow, но не работал

Вот мой код,

Sub ToCheckArray()

Dim N As Long

Worksheets("Sheet1").Select
If IsEmpty(Range("B6").Offset(1, 0).Value) Then
    Worksheets("Sheet1").Select
    arr1 = Array(Range("B6"))
    Worksheets("Sheet2").Select
    Range("A1:C1").AutoFilter field:=2, Criteria1:=arr1, Operator:=xlFilterValues
Else
    Worksheets("Sheet1").Select
    'With Sheets("Sheet1")
        'N = .Cells(Rows.Count, "B").End(xlDown).Row
        'ReDim ary(6 To N)
        'For i = 6 To N
            'ary(i) = .Cells(i, 1)
        'Next i
    'End With

    arr1 = Array(Range("B6", Range("B6").End(xlDown)))
    Worksheets("Sheet2").Select
    Range("A1:C1").AutoFilter field:=2, Criteria1:=ary, operator:=xlFilterValues
End If

End Sub
1
Shaumyabrata 6 Май 2018 в 16:29

1 ответ

Лучший ответ

Использовать

Else
    Dim ary As Variant
    With Worksheets("Sheet1")
        ary = Application.Transpose(.Range("B6", .Cells(Rows.Count, "B").End(xlDown)).Value)
    End With
    Worksheets("Sheet2").Range("A1:C1").AutoFilter field:=2, Criteria1:=ary, operator:=xlFilterValues
End If

Как видите, я избегал оператора Select вместо полной ссылки на диапазон вплоть до ссылки на лист.

Таким образом, весь ваш код можно переписать следующим образом:

Sub ToCheckArray()
    Dim ary As Variant

    With Worksheets("Sheet1")
        If IsEmpty(.Range("B6").Offset(1, 0).Value) Then
            ary = Array(.Range("B6").Value)
        Else
            ary = Application.Transpose(.Range("B6", .Cells(Rows.Count, "B").End(xlDown)).Value
        End If
    End With
    Worksheets("Sheet2").Range("A1:C1").AutoFilter field:=2, Criteria1:=ary, Operator:=xlFilterValues
End Sub

И если вы уверены, что Sheet1 всегда имеет значение в B6, и возможные другие значения следуют за ним до последней непустой ячейки в столбце B, тогда он может свернуться до:

Sub ToCheckArray()
    Dim ary As Variant

    With Worksheets("Sheet1")
        ary = Application.Transpose(.Range("B6", .Cells(Rows.Count, "B").End(xlUp)).Value
    End With
    Worksheets("Sheet2").Range("A1:C1").AutoFilter field:=2, Criteria1:=ary, Operator:=xlFilterValues
End Sub
1
DisplayName 6 Май 2018 в 14:16