Home » Excel VBA Rangeオブジェクト » VBAアクティブでないシートのRangeを取得するサンプル

VBAアクティブでないシートのRangeを取得するサンプル

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2110 ビルド14527.20276 Microsoft Store)

「マクロ アクティブでないシート range」
「vba シートをアクティブにせずセル取得」
といった検索キーワードで時折アクセスがあります。

グローバルメンバーのActiveCell・Cells・Rangeプロパティについてはご存知の方による検索でしょう。

[スポンサードリンク]

Workshee.RangeプロパティでアクティブでないシートのRangeを取得

アクティブブックの「Sheet1」シートのA1セルに何らかのデータを入力しておき、「Sheet1」シートをアクティブではない状態にしておいてから、以下のSubプロシージャを実行してください。

Sub アクティブでないシートのRangeを取得する_1()
 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プロシージャを実行すると、先ほどと同じ結果になります。

Sub アクティブでないシートのRangeを取得する_2()
 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に入力されているデータが順番にメッセージボックスに表示されます。

Sub アクティブでないシートのRangeを取得する_3()
 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を取得するサンプル

「Excel VBA Rangeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.