Получить значение из ячейки на разных листах в другой книге - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь сделать следующее, используя формулы Excel, а не VBA. У меня есть две книги (скажем, WB1 и WB2), и обе открыты в Excel. В WB1 у меня есть лист с ячейкой (скажем, A1), которая может иметь разные коды, часть которых является именем одного из листов в WB2. Коды имеют вид DOD8.2x1.9, DOD8.2x2.4...DOD9.2x1.9, DOD9.2x2.4.., DOD10.2x4.9 et c, где символы до x относятся к листам в WB2 (т.е. DOD8.2, DOD9.2, DOD10.2 et c). Мне нужна формула для другой ячейки в WB1 (скажем, B1), которая может получить значение определенной ячейки c на листе в WB2, которая определяется этим кодом. Я знаю, что формула в B1 формы =[WB2.xlsx]DOD8.2!$EB$6 или =[WB2.xlsx]DOD10.2!$EB$6 - это то, как получить значения ячеек из заданных c листов в WB2, и что формула =LEFT(A1, FIND("x",A1)-1) извлечет соответствующую часть ячейки A1 чтобы дать мне имя специфицированного рабочего листа c в WB2, но я не могу понять, как использовать его для построения формулы, которая объединяет эти два, чтобы автоматически выбрать рабочий лист, определенный кодом в A1. Я попытался заменить имя листа (например, DOD10.2) в общей формуле на LEFT(A1, FIND("x",A1)-1), поэтому я получил =[WB2.xlsx]LEFT(A1, FIND("x",A1)-1)!$EB$6, используя разные методы конкатенации, но ни один из них не работал. Может ли кто-нибудь предложить способ достижения этого?

1 Ответ

0 голосов
/ 11 мая 2020

Вы очень близко.

Предположим, у вас есть рабочая книга WB2, содержащая три рабочих листа, как вы описываете: DOD8.2, DOD9.2 и DOD10.2. В ячейке A1 каждого листа содержатся текстовые значения foo, bar и baz соответственно.

В электронной таблице WB1 вы можете получить доступ к этим трем значениям следующим образом:

=INDIRECT(CONCAT("[WB2.xlsx]", LEFT(A1, FIND("x",A1)-1), "!$A$1"))

Например:

enter image description here

Функция concat строит строку, представляющую референт на требуемый лист в WB2. Затем функция indirect интерпретирует эту строку как фактическую ссылку на ячейку и отображает содержимое ячейки.

Если вы предпочитаете использовать & вместо concat, вы можете использовать это:

=INDIRECT("[WB2.xlsx]" & LEFT(A1, FIND("x",A1)-1) & "!$A$1")
...