Функция листа Address()
делает именно это. Поскольку он недоступен через Application.WorksheetFunction
, я нашел решение с использованием метода Evaluate()
.
Это решение позволяет Excel работать с пробелами и другими забавными символами в имени листа, что является хорошим преимуществом по сравнению с предыдущими ответами.
Пример:
Evaluate("ADDRESS(" & rng.Row & "," & rng.Column & ",1,1,""" & _
rng.Worksheet.Name & """)")
возвращает в точности "Sheet1! $ A $ 1", а объект Range
с именем rng
ссылается на ячейку A1 на листе Sheet1.
Это решение возвращает только адрес первой ячейки диапазона, а не адрес всего диапазона ("Лист1! $ A $ 1" против "Лист1! $ A $ 1: $ B $ 2"). Поэтому я использую его в пользовательской функции:
Public Function AddressEx(rng As Range) As String
Dim strTmp As String
strTmp = Evaluate("ADDRESS(" & rng.Row & "," & _
rng.Column & ",1,1,""" & rng.Worksheet.Name & """)")
If (rng.Count > 1) Then
strTmp = strTmp & ":" & rng.Cells(rng.Count) _
.Address(RowAbsolute:=True, ColumnAbsolute:=True)
End If
AddressEx = strTmp
End Function
Полная документация по функции рабочего листа Address () доступна на веб-сайте Office: https://support.office.com/en-us/article/ADDRESS-function-D0C26C0D-3991-446B-8DE4-AB46431D4F89