У меня есть 2 рабочие тетради с более чем 60 листами. Мне нужно скопировать данные из одной рабочей книги в другую, но я хотел бы захватить и использовать имя рабочей таблицы в ячейке. Это потому, что когда я создаю книгу, я делаю мастер-лист, а затем копирую его более 60 раз. Приведенное выше сделало бы ссылку на ячейку для каждого рабочего листа соответствующей ячейкой рабочего листа в другом файле.
1 ответ
Вопрос
Я предполагаю, что у вас есть две книги (т.е. файлы электронных таблиц Microsoft Excel .xls ); давайте назовем их Master.xls и Book2.xls .  И [Master.xls]Sheet1 содержит
              A                       B                       C
1   =[Book2.xls]Sheet1!A1   =[Book2.xls]Sheet1!B1   =[Book2.xls]Sheet1!C1   ...
2   =[Book2.xls]Sheet1!A2   =[Book2.xls]Sheet1!B2   =[Book2.xls]Sheet1!C2   ...
и проблема в том, что когда вы создаете [Master.xls]Sheet2 как копию [Master.xls]Sheet1 , он также получает
              A                       B                       C
1   =[Book2.xls]Sheet1!A1   =[Book2.xls]Sheet1!B1   =[Book2.xls]Sheet1!C1   ...
2   =[Book2.xls]Sheet1!A2   =[Book2.xls]Sheet1!B2   =[Book2.xls]Sheet1!C2   ...
но вы хотите, чтобы ячейки в [Master.xls]Sheet2 на [Book2.xls]Sheet2 а не на [Book2.xls]Sheet1 .
Ответ
Создать «вспомогательную ячейку»; скажем, Z1 - где-то это не так. 
(Вы действительно не должны иметь это «хелпер», но все будет гораздо грязнее , если вы этого не сделаете.) 
Заполните его формулой, которая соответствует названию текущего листа, как описано в разделе Возможно ли получить имя листа?, такие как
=MID(CELL("filename"), FIND("]",CELL("filename"))+1, 256)
Затем установите ячейки в Master.xls в
=INDIRECT("[Book2.xls]" & $Z$1 & "!R" & ROW() & "C" & COLUMN(),  FALSE)
объяснение
[Master.xls]Sheet42!Z1 оценивается как Sheet42 , поэтому в каждой ячейке в [Master.xls]Sheet42 первые два члена первого аргумента INDIRECT будут оцениваться как [Book2.xls]Sheet42 . 
И, например, в ячейке S17 (например) любого листа ROW() оценивается как 17 а COLUMN() до 19 , поэтому последние четыре условия складываются в !R17C19 . 
Соберите все вместе, и вы получите
=INDIRECT("[Book2.xls]Sheet42!R17C19",  FALSE)
Когда вторым аргументом INDIRECT является FALSE , он интерпретирует строки, как R17C19 как S17 ; так что это эквивалентно
=INDIRECT("[Book2.xls]Sheet42!S17")
что эквивалентно
=[Book2.xls]Sheet42!S17
