Ссылка на определенный диапазон таблицы .DataBodyRange - PullRequest
0 голосов
/ 18 мая 2018

Допустим, у меня есть следующая примерная таблица

enter image description here

У меня есть цикл for, который проходит через весь ListColumn(2) (столбец C / 3) и ранжирует «пользователей» в зависимости от того, у кого больше всего яблок (например, у Майкла будет 1, у Роберта 2 и т. д.)

Однако, скажем, я хочу сослаться только на конкретный диапазонтаблица
(например, скажем, Range("C7:C9") <=> ListRows(3,4,5))
Как я могу это сделать?

У меня есть следующий код:

    Private Sub CommandButton1_Click()

    Dim tbl As ListObject: Set tbl = Sheets("Sheet1").ListObjects("Table1")
    Dim my_range As Range

    For Each my_range In tbl.ListColumns(2).DataBodyRange 
    ' ^ this runs through entire column instead of the specified range I want!
        my_range.Offset(0, 1) = WorksheetFunction.Rank(my_range, tbl.ListColumns(2).DataBodyRange)
         ' ^ again, isntead of entire DataBodyRange we should be rather referencing the specific Range
    Next my_range
End Sub

По сути, янеобходимо каким-то образом ограничить саму .DataBodyRange определенным диапазоном, проблема в том, что .DataBodyRange определено либо для того, чтобы взять весь столбец / строку или только 1 ячейку из всего ListObject как .DataBodyRange([row index], [column index]).

Итак,в предполагаемом примере выбора Роберта, Майкла, Лорел ListRows(3, 4, 5) Ожидаемый результат будет:

enter image description here

Есть предложения, как это сделать?

1 Ответ

0 голосов
/ 08 августа 2018

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

With tbl.ListColumns(2).DataBodyRange
    For Each my_range in Range(.Cells(3), .Cells(5))
      ' Code here.
    Next my_range
End With

Это то, что вы имеете в виду?

...