2015-02-11 2 views
6

Я хочу сослаться на значение ячейки в другом закрыто рабочая тетрадь с формулой (не VBA!). Имя листа хранится как переменная (в следующем примере C13 - «Лист2»).Ссылка на значение в закрытой книге Excel с использованием INDIRECT?

Если другой файл открыт, то следующие работы:

=INDIRECT("[myExcelFile.xlsm]" & C13 & "!$A$1") 

Если файл закрывается, приведенная выше формула не работает, так как нет абсолютного пути дано. Но я получил его работать со следующими (обратить внимание на "вместо«:

='C:\data\[myExcelFile.xlsm]Sheet2'!$A$1 

Теперь я хочу, чтобы заменить жёстко прописанный „Лист2“ с динамическим ссылочным значением, значит с С13 (как показано в первом фрагменте коды).

кто-нибудь знает решение без использования VBA или других библиотек?

ответ

6

Существует окончательно no way to do this со стандартными формулами. Однако, сумасшедший вид ответ может быть найден here. он по-прежнему избегает VBA, и он будет позволяют получить динамический результат.

  1. Сначала сделайте формулу, которая будет генерировать вашу формулу, но не добавьте = в начале!

  2. Давайте сделаем вид, что вы создали эту формулу в ячейке B2 из Sheet1 и хотите, чтобы формула была оценена в столбце c.

  3. Теперь перейдите на вкладку «Формулы» и выберите «Определить имя». Дайте ему имя myResult (или что вы выбрали), и под относится, писать =evaluate(Sheet1!$B2) (обратите внимание на $)

  4. Наконец, перейдите к C2, и писать =myResult. Перетащите, и ... voila!

+0

Спасибо за этот ответ, +1. Но поскольку вы уже добавили свой ответ: это дает мне только одну динамически созданную формулу. Но я хочу дублировать весь лист и применять формулу к ним - без создания пары имен. Почему вы уверены (по дизайну), что окончательно нет другого пути? – Chris

+2

Я сделал цитату из-за того, почему я был настолько категоричен, что нет другого пути (кроме VBA), и я удалил «по дизайну» (потому что я не занимался дизайном Excel - «оценивать текст как регулярную функцию «просто не кажется в духе Excel. Я, вероятно, преувеличил свое дело). Кроме того, я нашел лучшую цитату для ответа, которая привела к более полезной, перетаскиваемой функции. Надеюсь, это удовлетворит ваши потребности лучше! –

+0

Я не знаю, почему (и я не добавил «=»), но, к сожалению, выше решение (оценить функцию в определении имени) не помогло решить мою проблему (ошибка #REF).С другими примерами он работал (простые 1 + 2 операции и т. Д.) - также с вашим вторым наконечником, перетаскивая работу, но не для закрытой книги. – Chris

1

Проверка INDEX Функция:

=INDEX('C:\path\[file.xlsm]Sheet1'!A10:B20;1;1) 
-1

= INDIRECT ("'C: \ Data [" & A8 & "] SheetName'! $ G9")

где A8 содержит myExcelFile .xlsm

и G9 содержит ценную информацию о ваших источниках.

+0

Вопрос о переменном имени листа означает «гибкость» SheetNAME в предлагаемом решении. – Chris

0

Если вам известно количество листов, на которые вы хотите ссылаться, вы можете использовать функцию ниже, чтобы узнать имя. Чем вы можете использовать его в функции INDIRECT.

Public Function GETSHEETNAME(address As String, Optional SheetNumber As Integer = 1) As String 

    Set WS = GetObject(address).Worksheets 
    GETSHEETNAME = WS(SheetNumber).Name 

End Function 

Это решение не требует ссылка рабочей книги, чтобы быть открытым - Excel собирается открыть его сам по себе (но это собирается быть скрыты).

+0

Дорогой Стефан, что такое «адрес» в вашем примере VBA? Это путь к файлу? –

+0

Да, это полный путь к файлу, например. C: \ Users \ Штефана \ Desktop \ file.xlsx. Обычно я делаю ввод пути файла в ячейке для удобства. – Stefan

0

OK,

Вот метод динозавр для вас на Office 2010.

Укажите полный адрес, который вы хотите использовать, с помощью конкатенации (метод объединения текста «&»).

Сделайте это для всех необходимых вам адресов. Он должен выглядеть следующим образом:

= "=" & "'\ ПОЛНЫЙ СЕТЬ АДРЕСА включая [Spreadsheet имя]" & W3 & "' $ w4" !

W3 является динамической ссылкой на то, что лист я используя, W4 - ячейка, которую я хочу получить от листа.

После этого запустите сеанс записи макросов. Скопируйте ячейку и вставьте ее в другую. Я вложил его в объединенную ячейку, и это дало мне классическую ошибку «Тот же размер». Но одно дело - вставить полученный текст из моего конкатената (в том числе дополнительный «=»).

Скопируйте все, что вы сделали для этого. Затем перейдите в каждую вставленную ячейку, выберите текст и просто нажмите enter. Он обновляет его до активной прямой ссылки.

Как только вы закончите, положите курсор где-нибудь красивым и остановите макрос. Назначьте его кнопке, и все готово.

Это немного PITA, чтобы сделать это в первый раз, но как только вы это сделали, вы только что сделали квадратную привязку подходящей, что дамбовое круглое отверстие.

0

Я тоже искал ответ на ссылки на ячейки в закрытой книге. Ниже приведена ссылка на решение (правильная формула) ниже. Я пробовал это в своем текущем проекте (ссылаясь на одну ячейку и массив ячеек), и он хорошо работает без ошибок. Надеюсь, это поможет вам.

https://www.extendoffice.com/documents/excel/4226-excel-reference-unopened-file.html

В формуле E:\Excel file\ это полный путь к файлу в запечатанной книге, test.xlsx это название книги, Sheet2 это имя листа, который содержит значение ячейки вам нужно ссылаться из и A:A,2,1 означает, что ячейка A2 будет указана в закрытой книге. Вы можете изменить их в соответствии с вашими потребностями.

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

=INDEX('E:\Excel file\[test.xlsx]sheetname'!A:A,2,1)

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

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