Home » ExcelVBA Rangeオブジェクト » Offsetプロパティ » TopLeftCell.Offset(0, 1)とは

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

「.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)」をしっかり意識しましょう。

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
 Debug.Print rng_topleft.Address(False, False)

 Dim rng_offset As Range
 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を取得していることを意識しながら、何度かステップ実行してみてください。

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » Offsetプロパティ » TopLeftCell.Offset(0, 1)とは

「Offsetプロパティ」の記事一覧

検索


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

.