|  02.05.2010, 15:28 | #1 | 
| Участник | Excel диапазон ячеек 
			
			Добрый день. Можно ли как нибудь узнать по названию именованной ячейки в Excel'e адрес ее последней ячейки? То есть имеется диапазон под названием Area ("B2: D4"). В итоге нужно получить номер колонки ячейки D4. Это нужно для определения ячейки, в которую будет вставлен скопированный диапазон Area. | 
|  | 
|  02.05.2010, 19:09 | #2 | 
| Moderator | 
			
			А что есть "последняя ячека"? А если дипазон задан как "A2,D4" или, скажем, так - "Sheet1!A2:Sheet1  4,Sheet1!A2:Sheet1  4". То есть, как я понимаю, диапазон в Excel не обязан быть непрерывной областью, а может быть набором ячеек, разбросанных по листам документа. В этом случае понятие "крайности" ячейки становится слишком субъективным. Отвечая на вопрос, диапазон - это Range. Его можно получить так: X++: xlApp = new COM("Excel.Application"); xlBooks = xlApp.workbooks(); xlBook = xlBooks.open(filename); range = xlApp.Range(range) У range есть методы columns() и rows(), можно попробовать использовать их. Я же во исключение сюрпризов с хитрым Range предпочитаю работать с дипазоном поячеечно: X++: application.goto reference:=range for each cell in range label = cell.address(false, false) ... next | 
|  | |
| За это сообщение автора поблагодарили: andrewK (1). | |
|  02.05.2010, 19:51 | #3 | 
| Участник | 
			
			Да, похоже придется использовать перебор ячеек для определения "конца диапазона"... Это был последний вариант у меня. Диапазон range используется непрерывный. Я его использую для вывода ценников, в итоге встала задача копировать (распределять) исходный шаблон ценника по всему листу А4. Т.е. возможность скопировать ценник "вправо", и "вниз" | 
|  | 
|  02.05.2010, 19:54 | #4 | 
| Moderator | Цитата: 
		
			Диапазон range используется непрерывный.
		
	 | 
|  | 
|  02.05.2010, 19:59 | #5 | 
| Участник | 
			
			Но, в том-то и дело, что диапазон задается по имени, например "Area".  Так легче обрабатывать шаблоны разного размера (они разной высоты). | 
|  | 
|  03.05.2010, 14:22 | #6 | 
| Microsoft Dynamics | 
			
			Если у вас DAX 4.0 SP2 FP1 и выше, обратите внимание на метод \Classes\ComExcelDocument_RU\cellAddress для преобразования именованной ячейки в координаты, и на метод \Classes\ComExcelDocument_RU\cellRegion2ColRow, что бы посмотреть, как получается значение переменной lastCell.
		 | 
|  | |
| За это сообщение автора поблагодарили: andrewK (1). | |
|  03.05.2010, 14:40 | #7 | 
| Moderator | 
			
			На 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 )Код: ? Range("B2:D4").Cells.Item(Range("B2:D4").Cells.Count).Address(false,false)
D4P.S. Проиллюстрирую нумерацию ячеек внутри диапазона B2: D4, который состоит из следующих ячеек Код: B2 C2 D2 B3 C3 D3 B4 C4 D4 Код: (1,1) (1,2) (1,3) (2,1) (2,2) (2,3) (3,1) (3,2) (3,3) При обращении через Range("B2: D4").Cells.Item(i) - т.е. при одномерной индексации - индекс (i) соответственно выглядит так (нумерация идёт по строкам): Код: (1) (2) (3) (4) (5) (6) (7) (8) (9) Последний раз редактировалось Gustav; 04.05.2010 в 11:44. Причина: добавил иллюстрацию различных способов нумерации ячеек | 
|  | |
| За это сообщение автора поблагодарили: andrewK (1). | |
|  03.05.2010, 14:43 | #8 | 
| Участник | |
|  | 
|  03.05.2010, 20:31 | #9 | 
| Moderator | 
			
			Кстати, если вся задача формулируется буквально вот так: ...то это совсем просто - надо использовать у Range свойства Column (номер колонки верхней левой ячейки) и свойство Columns.Count (кол-во колонок диапазона). На VBA в окне отладки получается: Код: Set rng = Range("B2:D4") : ? rng.Column + rng.Columns.Count - 1
 4 | 
|  | 
|  03.05.2010, 20:37 | #10 | 
| Участник | 
			
			Спасибо всем большое, получается можно закрыть тему.
		 | 
|  | 
|  | 
| 
 |