Предположим, у меня есть ячейка C5, и я хочу отобразить имя листа в ячейке первого листа, которое имеет наибольшее значение C5 среди всех листов в этой книге.

Обратите внимание, что не максимальное значение C5, а имя листа

Я не хочу этого:

= MAX('first_sheet_name:last_sheet_name'!B1)

Я уже знаю это, и я прошу что-то еще

2 ответа2

1

Вы можете использовать VLOOKUP()

Сначала мы создаем таблицу для использования VLOOKUP() . Используя менеджер имен на вкладке данных, мы создаем Name именем Sheets и присваиваем ему следующую формулу:

=SUBSTITUTE(GET.WORKBOOK(1),"["&GET.WORKBOOK(16)&"]","")

Затем выберите ячейку на любом листе, скажите I2 и введите:

=IF(COUNTA(Sheets)>=ROW($A1),INDEX(Sheets, ROW($A1)), "")

и скопировать вниз. (это создает список имен листов)

В H2 введите:

= ЕСЛИ (I2 = "", "", НЕПОСРЕДСТВЕННО (I2 & "!C5"))

и скопировать вниз. Cols H и я таблица поиска:

Наконец этот поиск:

=VLOOKUP(MAX(H:H),H:I,2,FALSE)

получает имя листа

0

Возврат имени листа без использования VBA немного сложен.
Вы можете вручную сравнить ячейки и листы, но это возможно только при наличии нескольких листов и ячеек.

=IF(Sheet1!C5>Sheet2!C5;IF(Sheet1!C5>Sheet3!C5;"Sheet1";"Sheet3");IF(Sheet2!C5>Sheet3!C5;"Sheet2";"Sheet3"))

Простое сравнение значений C5 в "Sheet1", "Sheet2" и "Sheet3".

Единственный известный мне способ отображения имени листа - использовать что-то похожее на:

=MID(CELL("filename";A1);FIND("]";CELL("filename";A1))+1;255)

Это вернет только лист указанной ячейки, в этом случае лист с кодом.

Или в VBA, что-то похожее на:

Dim cell As Range
Dim cellAddress As String
Set cell = ThisWorkbook.Worksheets(1).Cells(1, 1)
cellAddress = cell.Parent.Name

Теперь мы просто должны объединить это с правильной ячейкой. Еще не разобрался в этой части.

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