Как я могу получить имя листа в ячейке? (У меня есть более одного листа, я хочу получить текущий на каждом листе)
5 ответов
Вот формула.
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256)
Microsoft объясняет, что вам может понадобиться использовать формулу массива, чтобы получить имя листа:
Чтобы отобразить имя текущего рабочего листа, введите следующую формулу в качестве формулы массива
=RIGHT(CELL("filename"),LEN(CELL("filename"))- MAX(IF(NOT(ISERR(SEARCH("\",CELL("filename"), ROW(1:255)))),SEARCH("\",CELL("filename"),ROW(1:255)))))
где "имя файла" - это буквально слово "имя файла" в кавычках.
ПРИМЕЧАНИЕ. Вы должны ввести эту формулу в виде формулы массива. Чтобы ввести формулу в виде формулы массива, нажмите сочетание клавиш CTRL+SHIFT+ ВВОД.
Также обратите внимание, что это очень зависит от платформы. На Mac вам понадобятся разные формулы, так как он использует разные разделители пути. Кроме того, это может работать по-другому в OpenOffice.org и других альтернативах. А при использовании на несохраненной книге вы можете получить # #VALUE!
вместо.
Если вы не используете формулу массива, вы можете получить имя книги (последняя часть имени файла), например, так:
Чтобы вернуть только имя книги, как используется в следующей формуле:
=MID(CELL("filename"),SEARCH("[",CELL("filename"))+1, SEARCH("]",CELL("filename"))-SEARCH("[",CELL("filename"))-1)
Сначала сохраните ваш файл, затем введите эту формулу где угодно
=RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))
Протестировано и работает на M $ EXCEL и LibreOffice CALC (формула на испанском языке):
=EXTRAEB(CELDA("filename");SI(ESERROR(1+HALLAR("]";CELDA("filename")));SI(ESERROR(3+HALLAR("'#$";CELDA("filename")));0;3+HALLAR("'#$";CELDA("filename")));1+HALLAR("]";CELDA("filename")));LARGO(CELDA("filename")))
Примечание. Это одна огромная формула, которая вписывается в другие формулы или использует только одну ячейку.
Я думаю по-английски: EXTRAEB будет MIDB, CELDA будет CELL, SI будет IF, ESERROR будет ISERROR, HALLAR будет FIND, а LARGO будет DENGTH.
Намного лучше, если вы разделите такую огромную формулу на несколько ячеек (чтобы не вызывать один и тот же несколько раз):
=CELDA("filename")
=1+HALLAR("]";<CellReferenceFor_1>)
=3+HALLAR("'#$";<CellReferenceFor_1>)
=ESERROR(<CellReferenceFor_2>;)
=ESERROR(<CellReferenceFor_3>;)
=EXTRAEB(<CellReferenceFor_1>;SI(<CellReferenceFor_4>;SI(<CellReferenceFor_5>;0;<CellReferenceFor_5>);<CellReferenceFor_4>);LARGO(<CellReferenceFor_1>))
Почему, черт возьми, получить имя листа так сложно, в то время как получить положение листа в списке листов так просто в современной электронной таблице (предупреждение, в EXCEL 2000 такого не существует): =HOJA(A1)
И еще: почему функции называются по-разному на каждом языке, что если у меня M $ EXCEL на испанском и CALC на английском (не говоря уже на русском, китайском и т.д.)? какая тяжелая работа, нужно помнить все имена функций на несколько идиом.
Внутренне они сохраняются с конкретными именами, например =SHEET(A1)
который совпадает с =HOJA(A1)
, сохраняется как =_xlfn.SHEET(A1)
; почему бы не использовать на всех идиомах последний?
Или сказал в другой форме: почему, если я поставлю его на английском языке, он скажет, что это не имя vaild функции (если CALC / M $ EXCEL не на английском языке)?
С функциями M $ ACCESS и SQL, которые не выполняются, в испанской версии я могу напечатать их на испанском ESNULO()
и на английском ISNULL()
и он принимает их правильно.
Если это слишком сложно принять оба; ну, тогда примите только одно, не локализуйте, чтобы умножать идомы!
Итак, возвращаясь к вопросу, трюк, который я использую в этой огромной формуле, состоит в том, чтобы проверить, существует ли ]
(M $ EXCEL), иначе проверить, существует ли '#$
(LibreOffice CALC), извлекая имя из =CELL("filename")
. Это так странно!
Снова с сарказмом: почему они добавили =SHEET(A1)
а не =SHEETNAME(A1)
? Это делает для всех нас тяжелее работать!
В LibreOffice я смешал вашу формулу со следующим, и число 20 к концу будет ограничением для отображаемых символов:
=(SUBSTITUTE(MID((ПРАВЫЙ (CELL ("имя_файла"), LEN (CELL ("имя_файла"))- MAX (IF (NOT (ISERR (SEARCH ("\", CELL ("имя_файла"), ROW (1:255:255)))), SEARCH ("\", CELL ("имя_файла"), СТРОКА (1:255:255)))))), FIND ("# $", (правый (CELL ("имя файла "), LEN (CELL (" имя_файла "))- MAX (IF (NOT (ISERR (SEARCH ("\"CELL ("имя_файла"), СТРОКА (1:255:255)))), SEARCH ("\», ЯЧЕЙКА ("имя_файла"), ROW (1:255:255)))))))+2,20), 1,1))