web-dev-qa-db-ja.com

VBAを介してセルで言及されている別のシートのセルを参照する方法

「Sheet1」と「Sheet2」を含む「Book1」という名前のExcelファイルがあります。 Sheet1では、A1のセル値は "'[Book1.xlsb] Sheet2'!$ A $ 14"であり、これは数式の結果として導出されます。セルA1に記載されているセル参照をVBAで選択したい。

私はVBコードとして

Range(Range("A1")).Select or Range([Indirect("A1")]).Select

このコードは、A1で参照されているセルが同じシートにある場合にのみ機能しますが、参照されているセルが別のシートにある場合は機能しません。

誰かがこれを解決するのを手伝ってもらえますか

3
Jignesh Bavishi

次のいずれかの方法を実行できます。

With Worksheets("Sheet2")
    .Activate
    .Range([Indirect("Sheet1!A1")]).Select
End With

または

With Worksheets("Sheet2")
    .Activate
    .Range(Worksheets("Sheet1").Range("A1")).Select
End With
0
user3598756

両方のワークシート(「Sheet1」と「Sheet2」)が同じワークブックにあるため、「Sheet1」セルA1の値は"Sheet2!$ A $ 14"である必要があります。

以下のコードは必要以上に少し長くなっていますが、より適切に説明するためにすべての手順を実行したいと思いました。

Split関数を使用してWorksheet名とRange.Addressを分離し、結果を2つの配列要素に入れています。

その後、最初の配列RngString要素をワークシートの名前として取得し、2番目の配列要素がrange.addressになります。

コード

Option Explicit

Sub SelectRange()

Dim Rng As Range
Dim RngString As Variant
Dim ShtName As String
Dim RngAddress As String

RngString = Split(Worksheets("Sheet1").Range("A1").Value, "!")

' sheet name is the first array element
ShtName = RngString(0)

' Range address is the second array element
RngAddress = RngString(1)

' setting the Rng object
Set Rng = Worksheets(ShtName).Range(RngAddress)

' since your range is in another worksheet, you need to activate it first
Worksheets(ShtName).Activate
' select the range
Rng.Select

End Sub
4
Shai Rado