
Мне нужна формула, которая будет использовать адрес ячейки и возвращать определенное имя ячейки, т.е.
=INDIRECT(ADDRESS(ROW(),COLUMN(),1,,"SHEET 001"))
Мне нужно, чтобы это ADDRESS(ROW(),COLUMN()
ссылалось на текущее определенное имя ячейки
, то есть «продажи», а не$A$1
решение1
Я придумал быстрый обходной путь, хотя, надо признать, немного ограниченный.
- Вставьте список всех определенных имен в свободную область листа.
- Следующая формула создаст строку, похожую на полный адрес ячейки, который вы ищете, сопоставит его в списке и вернет имя ячейки из соседнего столбца =INDEX(NameList,MATCH("='"&SUBSTITUTE(CELL("filename"),"fully_qualified_filename","")&"'!"&CELL("address"),NameReferences,0))
Очевидно, что он ограничен именами, указывающими на одну ячейку, но его можно расширить для поиска по диапазонам ячеек.
У меня это работает, потому что имя ячейки, отображающей данные, является именем поля данных, поэтому, где бы я его ни разместил, ссылка всегда будет правильной.
Работая над проектом, я включил в часто запускаемый макрос оператор, который обновляет список имен, чтобы поддерживать его в актуальном состоянии.
решение2
Я не могу присвоить себе заслугу в написании этого кода, но он делает именно то, что вам нужно. Мне нужна была та же функция несколько лет назад, и я наткнулся на этот код где-то в киберпространстве, возможно, немного его изменил, но я не могу вспомнить, как именно. Он отлично работал для меня.
Это работает так:
- Вставьте приведенный ниже код в модуль VBA книги Excel с поддержкой макросов (*.xlsm).
- Затем введите в ячейку листа Excel что-то вроде «=CellName(F19)», и она вернет что-то вроде «rngSomeNamedCell».
Вот код:
Public Function CellName(cel As Range) As Variant
Dim nm As Name
For Each nm In Names
If nm.RefersTo = "=" & cel.Parent.Name & "!" & cel.Address Then
CellName = nm.Name
Exit Function
End If
Next
CellName = CVErr(xlErrNA)
End Function
решение3
Я не верю, что есть встроенная функция Excel, которая сделает это. Вы можете использовать пользовательскую функцию, чтобы вернуть имя ячейки.
Две функции ниже вернут имя ячейки. Одна принимает ссылку на ячейку, другая — строку и столбец. Обе настроены на работу только на локальном листе прямо сейчас, но вы можете добавить необязательную переменную для получения имени рабочего листа, если это необходимо.
Первая функция будет вызвана с помощью=cell_name()
Гордон
Function cell_name() As String
dim rng as Range
On Error Resume Next
set rng = activeCell
If Len(rng.Name.Name) < 0 Then
cell_name = "No named Range"
Exit Function
End If
cell_name = rng.Name.Name
if instr("cell_name","!")>0 then
cell_name = Right(cell_name, Len(cell_name) - InStr(cell_name, "!"))
end if
End Function
вторая функция возвращает имя ячейки из указанной строки и столбца
Function cell_name2(r As Long, c As Long) As String
Dim rng As Range
Set rng = Cells(r, c)
On Error Resume Next
If Len(rng.Name.Name) < 0 Then
cell_name = "No named Range"
Exit Function
End If
cell_name2 = rng.Name.Name
End Function
Отредактирована первая функция для работы с активной ячейкой.