Как мне указать переменную Excel диапазона? - PullRequest
9 голосов
/ 04 июня 2011

Я бы хотел иметь возможность динамически указывать диапазон в Excel на основе переменных строки / столбца.

Допустим, у меня есть файл с содержимым, которое выглядит примерно так:

   A   B   C   D   E
1  10  11  12  13  14
2  51  52  53  54  55

Если бы я хотел суммировать элементы в строке 1, столбцы 2-4 (т. Е. 11 + 12 + 13), как бы я указал это?

Если бы я делал это вручную, я бы набрал:

=SUM(B1:D1)

... но как программно сгенерировать это определение диапазона на лету, зная только искомые строки (1) и номера столбцов (2-4)?

=SUM(????)

Заранее спасибо за помощь!

(Я использую Microsoft Excel 2011 для Mac, поэтому решения на основе VBA / макросов Excel для меня не подойдут.)

Ответы [ 3 ]

10 голосов
/ 03 мая 2013

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

Итак, для вышесказанного:

=SUM(OFFSET(A1,0,1,1,3))

, чтобы разбить его:

OFFSET(reference cell,
       row offset from ref cell to start the range,
       col offset to start the range, height of range you want,
       width of range you want)

Вы можете сделать смещения нулем, если хотите, или + для уменьшения, - для увеличения

2 голосов
/ 04 июня 2011

Это зависит от того, как на «известные» номера строк и столбцов ссылаются
Например, если они являются значениями в ячейках на листе:

     A          B
 9   Row        1
10   ColStart   1
11   ColEnd     4

Используйте функцию INDRECT для построенияссылка на диапазон

=SUM(INDIRECT("R"&B9&"C"&B10&":R"&B9&"C"&B11,FALSE))
2 голосов
/ 04 июня 2011

Не уверен, что вы хотите.
Вы имели в виду это?

dim parent_range as range
dim child_range as range

set parent_range = me.range("a1:e2")
set child_range = range(parent_range.rows(1).cells(2), parent_range.rows(1).cells(4))

msgbox "=sum(" & child_range.address(false, false, xla1) & ")"

Или вы хотели это как формулу?

=SUM(INDEX($A$1:$E$2,1,2):INDEX($A$1:$E$2,1,4))
...