「.TopLeftCell.Offset 意味」
「TopLeftCell.Offset(0, 1)意味」
といった検索キーワードで時折アクセスがあります。
「ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, 1)」といったコードが、何を意味しているのか調べていた方による検索です。
TopLeftCell.Offset(0, 1)とは
結論からお伝えすると、「.TopLeftCell.Offset(0, 1)」とは、Shapeオブジェクトの左上隅にあるセルの、1つ右隣のセルを表すRangeオブジェクトを取得するコードです。
下図のような四角形であれば、
左上隅にあるB2セルの、1つ右隣のC2セルを表すRangeオブジェクトを取得しているのが「.TopLeftCell.Offset(0, 1)」です。
拙著『理解するExcel VBA/図形操作の基本』の、「2-1. 位置に関わるプロパティ・メソッド」でも解説している、ShapeオブジェクトのTopLeftCellプロパティで取得した
RangeオブジェクトのOffsetプロパティを使っているコードです。
TopLeftCell.Offset(0, 1)を確認するサンプルマクロ
コードをステップ実行して、「.TopLeftCell」と「.TopLeftCell.Offset(0, 1)」をしっかり意識しましょう。
Dim shp As Shape
Set shp = ActiveSheet.Shapes(1)
Dim rng_topleft As Range
Set rng_topleft = shp.TopLeftCell
rng_topleft.Select
Debug.Print rng_topleft.Address(False, False)
Set rng_offset = rng_topleft.Offset(0, 1)
rng_offset.Select
Debug.Print rng_offset.Address(False, False)
End Sub
アクティブなワークシートに、四角形を1つだけ挿入して、上記のExcelマクロをステップ実行してください。
ステップ実行中の様子
下図のように、左上隅がB2セルにある四角形が「ActiveSheet.Shapes(1)」で取得できる場合、
以下のような挙動をします。
ステップ実行をすすめて、
Sub TopLeftCell_Offsetを確認する() Dim shp As Shape Set shp = ActiveSheet.Shapes(1) Dim rng_topleft As Range Set rng_topleft = shp.TopLeftCell rng_topleft.Select
まで実行すると、「shp.TopLeftCell」で取得したB2セルが選択され、
次の、
Debug.Print rng_topleft.Address(False, False)
を実行すると、「shp.TopLeftCell」で取得したB2セルのセル番地「B2」がイミディエイトウィンドウに出力されます。
つづく、
Dim rng_offset As Range Set rng_offset = rng_topleft.Offset(0, 1) rng_offset.Select
までステップ実行すると、「rng_topleft.Offset(0, 1)」で取得したC2セルが選択され、
最後の
Debug.Print rng_offset.Address(False, False)
を実行すると、「rng_topleft.Offset(0, 1)」で取得したC2セルのセル番地「C2」がイミディエイトウィンドウに出力されます。
Shapeオブジェクトに用意されているTopLeftCellプロパティで、
Dim rng_topleft As Range Set rng_topleft = shp.TopLeftCell
図形の左上隅のセルを表すRangeオブジェクトを取得していること、RangeオブジェクトのOffsetプロパティの引数に(0, 1)を指定することにより、
Dim rng_offset As Range Set rng_offset = rng_topleft.Offset(0, 1)
Shape.TopLeftCellプロパティで取得したRangeの1つ右隣のセルを表すRangeを取得していることを意識しながら、何度かステップ実行してみてください。
- Newer:FIND関数で文字列が見つからない場合-IFERROR関数
- Older:Word VBAで画像を背面に
Home » Excel VBA Rangeオブジェクト » Offsetプロパティ » TopLeftCell.Offset(0, 1)とは