Функция OFFSET($A$1:$Z$25,2,3,4,5) относится к диапазону $D$3:$H$6 текущего рабочего листа.

Если я передаю "адрес" в качестве первого параметра в функцию CELL и вышеупомянутую функцию OFFSET в качестве второго параметра, я получаю только адрес первой ячейки в диапазоне. Другими словами,

=CELL("address",  OFFSET($A$1:$Z$25,2,3,4,5))

производит значение $D$3 .

Есть ли способ написать функцию, которая возвращает полную ссылку для диапазона ячеек? Например, что-то вроде:

=RANGE("address",  OFFSET($A$1:$Z$25,2,3,4,5))

что даст значение $D$3:$H$6?

РЕДАКТИРОВАТЬ: Это очень просто сделать с небольшим VBA. Я надеялся избежать этого, чтобы меня не заставляли сохранять как файл .xlsm с поддержкой макросов. Вот функция VBA, которую я пытаюсь реализовать с помощью только функций листа:

Function ShowAddress(CellRange As Range) As String
    ShowAddress = CellRange.Address
End Function

Примечание. Моя мотивация для этого - помочь с отладкой создания сложных динамических именованных диапазонов. Я знаю, что могу скопировать и вставить формулу в поле Goto, но это добавляет немало работы в цикл разработки.

1 ответ1

0

Cell() возвращает только первую ячейку в ссылке на несколько ячеек. Смотрите статью поддержки.

Если вы хотите создать ссылку на несколько ячеек, вы можете использовать Index() для первого диапазона и другой индекс для последней ячейки в диапазоне. Объедините две индексные функции с оператором: и результатом будет диапазон. Обратите внимание, что такую формулу можно использовать в аргументе, который ожидает диапазон, например, Sum(), или в именованной формуле в менеджере имен, но не в отдельной ячейке таблицы, потому что она возвращает диапазон.

=index(sheet1!$A$1:$Z$25,3,4):Index(Sheet1!$A$1:$Z$25,6,8)

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