Вы не можете добавить все видимые ячейки в диапазоне к такому массиву, он остановится при первом пропуске ячейки, потому что вы можете назначить только один диапазон за раз, и технически вы добавляете несколькодиапазоны (поскольку вы пропускаете ячейки).
Чтобы обойти это, вы можете запустить for each
для вашего отфильтрованного диапазона и добавить все видимые ячейки в ваш массив отдельно. Примерно так:
Sub listbox()
Dim i As Long, lastr As Long, j As Long
Dim cel As Range
Dim Myarr() As Variant
Dim rang As Range
lastr = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
Set rang = Sheet1.Range("A2:A" & lastr)
ReDim Myarr(0 To 17, 0 To lastr)
For Each cel In rang
If Not cel.Rows.Hidden Then
For j = 0 To 17
Myarr(j, i) = cel.Offset(0, j)
Next j
i = i + 1
End If
Next cel
ReDim Preserve Myarr(0 To 17, 0 To i - 1)
With Sheet1.ListBox1
.Column = Myarr
End With
End Sub
Редактировать: в соответствии с предложениями TM, я изменил способ назначения массива, адаптировал для соответствия оператор Redim
и назначил его спискусо свойством .column
. Это избавляет от лишних строк ближе к концу.