Как мне указать переменный диапазон Excel?

#excel #worksheet-function #excel-2011

#excel #рабочий лист-функция #excel-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, поэтому решения на основе Excel VBA / макросов для меня не будут работать.)

Ответ №1:

У меня была такая же потребность — похоже, 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:

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

      A          B
 9   Row        1
10   ColStart   1
11   ColEnd     4
  

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

 =SUM(INDIRECT("R"amp;B9amp;"C"amp;B10amp;":R"amp;B9amp;"C"amp;B11,FALSE))
  

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

1. INDIRECT по возможности следует избегать. Она изменчива, то есть пересчитывается при каждом изменении любой ячейки.

Ответ №3:

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

 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(" amp; child_range.address(false, false, xla1) amp; ")"
  

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

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

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

1. Спасибо за вашу помощь, GSerg. К сожалению, я использую Microsoft Excel 2011 для Mac, который не поддерживает макросы Excel VBA. Я предполагаю, что я ищу решение с использованием чистого Excel.

2. @Anirvan Тогда попробуйте формулу.

3. Это странно, я разработал макросы для Excel 2011 для Mac, есть несколько особенностей по сравнению с Windows, но по большей части все было так же. Я был бы удивлен, если вы не сможете использовать это в Excel 2011 для Mac.