2013-08-28 5 views
0

Я пытаюсь использовать VBA для вычисления некоторых полей. Когда я записываю макрос я получаю это:Ссылаясь на диапазон ячеек внутри формулы в VBA Excel

ActiveCell.FormulaR1C1 = "=AVERAGEIF(R4C[-27]:R4C[-6],2012,RC[-27]:RC[-6])" 

Проблема заключается в том, что диапазон для формулы может измениться.

У меня есть целочисленная переменная NumOfMon, которая подсчитывает необходимые столбцы для формулы из первого столбца на листе. Однако вышеприведенная формула использует смещения для определения требуемого диапазона, но поскольку мой диапазон может меняться, мне нужно использовать NumOfMon, чтобы использовать только нужные ячейки. Как изменить формулу, чтобы я мог ее правильно использовать?

Я попытался с помощью переменных, как это:

a = 28 
NumofMon = 21 
ActiveCell.FormulaR1C1 = "=AVERAGEIF(R4C[-(a-1)]:R4C[-(a-NumOfMon-1)],2012,RC[-(a-1)]:RC[-(a-NumOfMon-1)])" 

, но я получаю сообщение об ошибке: «определенно приложение или объект, определенная ошибка»

+0

вам нужно использовать VBA, чтобы сделать это делать? Имея только этот фрагмент, кажется, что вы можете использовать 'offset()' в нормальной формуле. –

+0

Я просто написал «a» и «NumofMon» для этого примера с фиксированными значениями, но они могут иметь любое другое значение, потому что они фактически вычислены – user1040563

+0

Да, 'offset()' позволяет ссылаться на 'a' и' numofmon' на динамически создайте таблицу, которую вы можете ссылаться. Однако, похоже, вам нужно использовать VBA для этого. –

ответ

2

основном

ActiveCell.FormulaR1C1 = "=AVERAGEIF(R4C[-" & (a-1) & "]:R4C[-" & (a-NumOfMon-1) & "],2012,RC[-" & (a-1) & "]:RC[-" & (a-NumOfMon-1) & "])" 
1

Если это возможно, превратить ваши данные в таблицу. Таким образом, вы можете ссылаться на динамические данные (изменение размера), не сталкиваясь с проблемами. Например, чтобы ссылаться на столбец A, называемый «Item» в таблице, называемой «Table1», ваша ссылка будет «= Table1 [Item]» Независимо от строк.

Смежные вопросы