У вас есть ListObject
, используйте его API!ListRows
и ListColumns
являются коллекциями объектов, и самый быстрый способ их итерировать, на несколько порядков , - это цикл For Each
:
Dim tblRow As ListRow
For Each tblRow In tbl.ListRows
Dim tblCol As ListColumn
For Each tblCol In tbl.ListColumns
Debug.Print "(" & tblRow.Index & "," & tblCol.Index & "): " & tblRow.Range(tblCol.Index).Value
Next
Next
Если выпросто хотите собрать содержимое в двумерный массив значений, вам не нужно ничего повторять - просто возьмите DataBodyRange
и обработайте его как любой другой "обычный" Range
:
Dim contents As Variant
contents = tbl.DataBodyRange.Value
Если вам позже потребуется выполнить итерацию этого двумерного массива вариантов, самый быстрый способ (тот же источник, что и выше) - это For...Next
loop:
Dim currentRow As Long
For currentRow = LBound(contents, 1) To UBound(contents, 1)
Dim currentCol As Long
For currentCol = LBound(contents, 2) To UBound(contents, 2)
Debug.Print "(" & currentRow & "," & currentCol & "): " & contents(currentRow, currentCol)
Next
Next