12

Как я могу получить имя листа в ячейке? (У меня есть более одного листа, я хочу получить текущий на каждом листе)

5 ответов5

7

Вот формула.

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256)

(Ссылка на дополнительную информацию)

7

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)
2

Сначала сохраните ваш файл, затем введите эту формулу где угодно

=RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))
0

Протестировано и работает на 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.

Намного лучше, если вы разделите такую огромную формулу на несколько ячеек (чтобы не вызывать один и тот же несколько раз):

  1. =CELDA("filename")
  2. =1+HALLAR("]";<CellReferenceFor_1>)
  3. =3+HALLAR("'#$";<CellReferenceFor_1>)
  4. =ESERROR(<CellReferenceFor_2>;)
  5. =ESERROR(<CellReferenceFor_3>;)
  6. =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)? Это делает для всех нас тяжелее работать!

-1

В 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))

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