Address()
ワークシート関数はまさにそれを行います。では利用できないため、メソッドApplication.WorksheetFunction
を使用して解決策を思いつきました。Evaluate()
このソリューションにより、Excel はシート名に含まれるスペースやその他の変な文字を処理できるようになります。これは、以前の回答よりも優れた利点です。
例:
Evaluate("ADDRESS(" & rng.Row & "," & rng.Column & ",1,1,""" & _
rng.Worksheet.Name & """)")
Sheet1 ワークシートの A1 セルを参照するRange
名前のオブジェクトを使用して、正確に "Sheet1!$A$1" を返します。rng
このソリューションは、範囲全体のアドレスではなく、範囲の最初のセルのアドレスのみを返します ("Sheet1!$A$1" vs "Sheet1!$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 Web サイトで入手できます。