40

Rangeオブジェクトがある場合、たとえば、それが。A1というワークシートのセルを参照しているとしBook1ます。だから私は電話をかけるAddress() と簡単なローカル参照が得られることを知っています:$A$1Address(External:=True)ブック名とワークシート名を含む参照を取得するために呼び出すこともできることを私は知っています: [Book1]Sheet1!$A$1

私が欲しいのは、本の名前ではなく、シートの名前を含むアドレスを取得することです。Address(External:=True)文字列関数を使用して、自分でブック名を呼び出して削除しようとはしません。範囲内で電話をかけることはできますSheet1!$A$1か?

4

11 に答える 11

62

私が考えることができる唯一の方法は、次のようにワークシート名をセル参照と連結することです:

Dim cell As Range
Dim cellAddress As String
Set cell = ThisWorkbook.Worksheets(1).Cells(1, 1)
cellAddress = cell.Parent.Name & "!" & cell.Address(External:=False)

編集:

最後の行を次のように変更します。

cellAddress = "'" & cell.Parent.Name & "'!" & cell.Address(External:=False) 

シート名にスペースやその他の変な文字が含まれていても機能させたい場合。

于 2008-09-25T02:23:32.290 に答える
16
Split(cell.address(External:=True), "]")(1)
于 2013-07-30T18:43:56.083 に答える
3

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 サイトで入手できます

于 2009-08-12T13:08:47.293 に答える
3

ベンは正しい。また、これを行う方法は考えられません。ベンが推奨する方法、または次の方法でワークブックの名前を削除することをお勧めします。

Dim cell As Range
Dim address As String
Set cell = Worksheets(1).Cells.Range("A1")
address = cell.address(External:=True)
address = Right(address, Len(address) - InStr(1, address, "]"))
于 2008-09-25T02:36:11.323 に答える
0

私が作成したユーザー定義関数で、次のことがうまくいったことがわかりました。セル範囲参照とワークシート名を文字列として連結し、Evaluate ステートメントで使用しました (Sumproduct で Evaluate を使用していました)。

例えば:

Function SumRange(RangeName as range)   

Dim strCellRef, strSheetName, strRngName As String

strCellRef = RangeName.Address                 
strSheetName = RangeName.Worksheet.Name & "!" 
strRngName = strSheetName & strCellRef        

次に、コードの残りの部分で strRngName を参照します。

于 2014-06-09T00:02:03.810 に答える
0
rngYourRange.Address(,,,TRUE)

外部アドレス、完全なアドレスを表示

于 2016-07-13T07:12:02.020 に答える
-1
Dim rg As Range
Set rg = Range("A1:E10")
Dim i As Integer
For i = 1 To rg.Rows.Count

    For j = 1 To rg.Columns.Count
    rg.Cells(i, j).Value = rg.Cells(i, j).Address(False, False)

    Next
Next
于 2011-03-25T11:48:57.807 に答える
-2

[2009 年 4 月 21 日編集]

    Micah が指摘したように、これは
    特定の範囲に名前を付けた場合にのみ機能します (つまり、誰か名前を付けますか?)。

[/編集]

パーティーに少し遅れていることはわかっていますが、他の誰かがグーグル検索でこれを見つけた場合(私がやったように)、次のことも試すことができます:

Dim cell as Range
Dim address as String
Set cell = Sheet1.Range("A1")
address = cell.Name

これにより、「=Sheet1!$A$1」のような完全なアドレスが返されます。

等号が必要ないと仮定すると、Replace 関数で削除できます。

address = Replace(address, "=", "")
于 2009-03-27T04:58:40.717 に答える