У меня есть 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