Показать сообщение отдельно
Старый 03.05.2010, 14:40   #7  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
На VBA объект Range, ссылающийся на последнюю ячейку непрерывного прямоугольного диапазона B2: D4, может быть получен как:
Код:
lastCell = Range("B2:D4").Cells( Range("B2:D4").Cells.Count )

ну или в виде, более удобном для преобразования в X++ как :

lastCell = Range("B2:D4").Cells.Item( Range("B2:D4").Cells.Count )

или в именах этой конкретной задачи как:

lastCell = Range("Area").Cells.Item( Range("Area").Cells.Count )
В окне отладки VBA (immediate window) можно проверить так:
Код:
? Range("B2:D4").Cells.Item(Range("B2:D4").Cells.Count).Address(false,false)
D4
Фишка в том, что ячейки диапазона допускают не только двухмерную адресацию вида (строка внутри диапазона, столбец внутри диапазона), но и одномерную с индексом от 1 до кол-во ячеек диапазона (свойство Count).

P.S. Проиллюстрирую нумерацию ячеек внутри диапазона B2: D4, который состоит из следующих ячеек
Код:
B2 C2 D2
B3 C3 D3
B4 C4 D4
При обращении через Range("B2: D4").Cells.Item(row,col) - т.е. при двухмерной индексации - индексы (row,col) соответственно выглядят так:
Код:
(1,1) (1,2) (1,3)
(2,1) (2,2) (2,3)
(3,1) (3,2) (3,3)
Т.е. Range("D4") это то же самое, что Range("B2: D4").Cells.Item(3,3).

При обращении через Range("B2: D4").Cells.Item(i) - т.е. при одномерной индексации - индекс (i) соответственно выглядит так (нумерация идёт по строкам):
Код:
(1) (2) (3)
(4) (5) (6)
(7) (8) (9)
Т.е. Range("D4") это то же самое, что Range("B2: D4").Cells.Item(9), где 9 = Range("B2: D4").Cells.Count

Последний раз редактировалось Gustav; 04.05.2010 в 11:44. Причина: добавил иллюстрацию различных способов нумерации ячеек
За это сообщение автора поблагодарили: andrewK (1).