Как выбрать диапазон в базе данных Excel ListColumn в диапазоне от второй до предпоследней ячейки с помощью VBA

#excel #vba #excel-tables

#excel #vba #excel-таблицы

Вопрос:

У меня есть данные, отформатированные в виде таблицы. Я пытаюсь выбрать диапазон ячеек в определенном столбце, независимо от ячеек, содержащих данные. Количество строк в таблице изменится, поэтому мне нужно использовать динамический диапазон.

Мне удалось выбрать весь диапазон тела данных столбца таблицы, в дополнение к диапазону от второй ячейки до последней.

Я планирую применить макрос условного форматирования к диапазону, если смогу установить диапазон.

Я изо всех сил пытаюсь уменьшить диапазон до предпоследней ячейки в столбце таблицы.

 Sub SelectRange()

Dim LC As ListColumn
Dim SecondCell As Long
Dim LastCell As Long
Dim SecondtoLastCell As Long

Set LC = Worksheets("On-going").ListObjects("Table4").ListColumns("Redos (no.)")
    'Choosing the table column with the header "Redos (no.)", works like a charm

With LC
    SecondCell = .DataBodyRange(2)
        'Choosing the second cell of the column, no problem
    
    SecondtoLastCell = .Range(.DataBodyRange.Rows.Count)
        'Choosing the second to last cell of the column. Came by this accidentally while trying everything, I have no idea why it works.

    '~~~Insert Range.Here
    'THE PROBLEM IS CREATING A RANGE FROM SecondCell TO SecondtoLastCell
 
End With

End Sub
  

Я чувствую, что перепробовал все возможности, включая Range(SecondCell amp; SecondtoLastCell).Select и Range(SecondCell, Range(SecondtoLastCell)).Select . Все, что обычно происходит, это то, что выбрана одна ячейка над строкой заголовка столбца («Redos (no.)».)».

Ответ №1:

Один из вариантов — использовать Range.Resize здесь:

 Set LC = Worksheets("On-going").ListObjects("Table4").ListColumns("Redos (no.)")

With LC.DataBodyRange
    Dim myRange As Range
    Set myRange = .Cells(2).Resize(.Rows.Count - 2)
End With
  

Ответ №2:

Спасибо @BigBen! Такое элегантное решение.

Я получил диапазон на месте Set myRange = .Cells(2).Resize(.Rows.Count - 2) .

Комментарии:

1. Ах да, конечно, вам также нужно исключить последнюю строку, я обновлю свой ответ - 2 .