У меня есть 2 рабочие тетради с более чем 60 листами. Мне нужно скопировать данные из одной рабочей книги в другую, но я хотел бы захватить и использовать имя рабочей таблицы в ячейке. Это потому, что когда я создаю книгу, я делаю мастер-лист, а затем копирую его более 60 раз. Приведенное выше сделало бы ссылку на ячейку для каждого рабочего листа соответствующей ячейкой рабочего листа в другом файле.

1 ответ1

0

Вопрос

Я предполагаю, что у вас есть две книги (т.е. файлы электронных таблиц 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .