2015-04-01 5 views
2

Предположим, у меня есть три листа (скажем, Sheet1, Sheet2 и Sheet3).Обратитесь к расширенному диапазону названий на другом листе, используя косвенные

Sheet1 и Sheet2 содержат каждый диапазон на уровне листа с именем MyRange. В Sheet3, если я хочу получить MyRange от Sheet1, я просто смогу использовать ='Sheet1'!MyRange.

Но теперь я хочу Sheet3 Чтобы содержать общий код и иметь возможность ссылаться либо на Sheet1, либо Sheet2. Так что я бы ожидать, чтобы быть в состоянии достичь того же с помощью

=INDIRECT("'" & MySheetName & "'!MyRange")

Однако я получаю ошибку #REF, когда я делаю это.

  • Что делать неправильно?
  • Как я могу обойти это?

ответ

1

Дальнейшее экспериментирование, вызванное очень полезным ответом tpkaplan, позволило мне лучше найти проблему. Вот мои выводы.

Точный случай, который я описывал в вопросе, действительно работает большую часть времени совершенно правильно (у меня это не получилось, но так и не удалось понять, почему).

Однако случай, который, как я думал, я тестировал, не соответствует действительности.

Фактически, вы должны быть очень конкретными в отношении так называемого «Именованного диапазона». Там может быть четыре различных элементов, которые обрабатываются по-разному Excel:

  • Название является ссылкой на ячейку
  • имя является ссылкой на постоянной
  • имя является ссылкой на таблицу ячейки
  • Это ссылка на любую из вышеупомянутых категорий, но по формуле.

Учитывая эти четыре категории, есть 3 способа получить #REF ошибку:

  • Неправильное имя листа (как было упомянуто tpkaplan);
  • Название диапазона не существует (очевидно);
  • Название относится к чему-либо еще, кроме ячейки или диапазона ячеек (мой фактический случай был формулой).

отметить также, что, если имя относится к клетке, заданной с помощью относительного позиционирования (например, название относится к ='Sheet1'!$A5, так что линия изменяется в зависимости от клетки вы звоните имя из), когда вызывается из другой лист, он будет вести себя так, как если бы он был вызван из ячейки A1 указанного листа.

Таким образом, путь, чтобы обойти проблему, состоял в том, чтобы иметь имя, отображающее значение, которое оно производит где-то, и иметь другое имя, которое ссылается на эту конкретную ячейку, которая теперь содержит информацию, которую вы пытаетесь получить. Затем обратитесь к этому второму имени.

2

Если MyRange состоит из несколько подряда, диапазон нескольких столбцов, то убедитесь, что вы нажали ctrl-shift-enter, когда вы вошли =INDIRECT("'" & MySheetName & "'!MyRange"). Если вы забыли использовать ctrl-shift-enter, вы получите сообщение об ошибке #VALUE. Однако вы заявили, что у вас есть #REF.

Используя свой код для диапазона с одной ячейкой, я получаю результат, который вы ищете. Единственный способ получить ошибку #REF - использовать неправильное имя листа. Я подозреваю, что это твоя проблема. Проверьте имя листа и повторите его с более подробной информацией, если он все еще не работает.

+1

Кажется, что существует более чем один способ получить эту ошибку #REF. На самом деле большинство полезных случаев вернет эту ошибку. Я развиваю это больше в своем ответе. В любом случае, спасибо, что позволил мне понять, что там происходит. –

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

  • Нет связанных вопросов^_^