2013-04-26 3 views
0

Я работаю со следующей таблицей в Excel:Excel формула возвращает #value, когда названный

Excel image

Следующая формула Равняется обычно, когда вводится непосредственно в клетку:

=DATE(YEAR(DATEVALUE($A$1)),MONTH(DATEVALUE($A$1)),DAY(INDIRECT(ADDRESS(2,COLUMN())))) 

Однако , когда я пытаюсь поместить его в именованную функцию test и вызвать =test в другой ячейке, он возвращает ошибку #VALUE!. Лучший ответ, который я получил после исследования, - это то, что названные формулы и функция indirect не всегда совместимы.

Если кто-то может пролить некоторый свет, чтобы объяснить, что я делаю неправильно или почему я не могу поместить вызов indirect внутри именованного диапазона, я был бы очень признателен!

+0

Когда вы говорите по имени функции, вы имеете в виду определенную пользователем функцию VBA? Или вы имеете в виду определенное имя с приведенной выше формулой в качестве значения «Относится к»? – chuff

+0

Non-VBA, определенное имя, которое вы бы создали при создании именованного диапазона. –

ответ

2

Да, я не верю, КОСВЕННЫЕ будет работать с именованным диапазоном - Вы не должны действительно нужен такой замысловатый формулу - попробуйте просто

=(C$2&$A$1)+0

формат как дата

Редактировать: как указано ниже, INDIRECT в порядке, но я не думаю, что COLUMN() понравится в названном диапазоне. Функции ROW и COLUMN иногда ведут себя плохо, потому что они возвращают «массивы» даже при одиночных значениях, поэтому вам нужна другая функция, например MAX или SUM, для преобразования {2} в 2, например.

=DATE(YEAR(DATEVALUE($A$1)),MONTH(DATEVALUE($A$1)),DAY(INDIRECT(ADDRESS(2,MAX(COLUMN())))))

хотя я думаю, что есть более короткие методы, как я указал выше ....

+2

+1 Мне нравится эта формула, но я не слишком уверен в том, что вы упомянули. Я не верю, что INDIRECT будет работать с именованным диапазоном. Я использовал 'Indirect' в именованных диапазонах, и он работал очень хорошо ... –

+0

Нет, вы правы, Сид, я говорил слишком рано - правильно ли, что INDIRECT не работает с ** динамическим ** названным диапазоном? Здесь я думаю, что это COLUMN(), потому что он возвращает «массив», такой как функция {2} - wrap COLUMN() в другой функции, такой как SUM, и именованный диапазон должен работать ..... –

+0

Я попробовал это '= INDIRECT (ADDRESS (2, COLUMN())) 'в именованном диапазоне, и это сработало? Или я чего-то не хватает? –

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