#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
.