「マクロ アクティブでないシート range」
「vba シートをアクティブにせずセル取得」
といった検索キーワードで時折アクセスがあります。
グローバルメンバーのActiveCell・Cells・Rangeプロパティについてはご存知の方による検索でしょう。
Workshee.RangeプロパティでアクティブでないシートのRangeを取得
アクティブブックの「Sheet1」シートのA1セルに何らかのデータを入力しておき、「Sheet1」シートをアクティブではない状態にしておいてから、以下のSubプロシージャを実行してください。
Dim rng As Range
Set rng = Sheets("Sheet1").Range("A1")
MsgBox rng.Value
End Sub
どのシートがアクティブな状態であっても、「Sheet1」シートのA1セルの値がメッセージボックスに表示されます。
上記コード
Set rng = Sheets("Sheet1").Range("A1")
のように、WorksheetオブジェクトのRangeプロパティを使ったコードにすれば、
アクティブでないシートのRangeも取得できます。
Workshee.CellsプロパティでアクティブでないシートのRangeを取得
先ほどの「Sheet1」シートが、ブックの先頭・左端にあるとき以下のSubプロシージャを実行すると、先ほどと同じ結果になります。
Dim rng As Range
Set rng = Sheets(1).Cells(1, "A")
MsgBox rng.Value
End Sub
こちらは、WorksheetオブジェクトのCellsプロパティを使ったコードです。
RangeとCellsを組み合わせてアクティブでないシートのRangeを取得するには要注意
アクティブブックの先頭・左端のシートのA1:C2セルに何らかのデータを入力した状態で、以下のSubプロシージャを実行すると、Sheets(1)で取得できるシートのA1:C2に入力されているデータが順番にメッセージボックスに表示されます。
Dim rng As Range
For Each rng In Sheets(1).Range(Sheets(1).Cells(1, "A"), Sheets(1).Cells(2, "C"))
MsgBox rng.Value
Next
End Sub
アクティブでないシートのRangeを取得しているのは、For Eachの行の、
Sheets(1).Range(Sheets(1).Cells(1, "A"), Sheets(1).Cells(2, "C"))
の部分です。アクティブでないシートのRangeを取得するコードに慣れていない場合、
Sheets(1).Range(Cells(1, "A"), Cells(2, "C"))
と書いてしまいがちな点に要注意です。
最終更新日時:2021-12-18 05:55
Home » Excel VBA Rangeオブジェクト » VBAアクティブでないシートのRangeを取得するサンプル