Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » ActiveSheet.Shapes(Application.Caller).TopLeftCellの戻り値は?

ActiveSheet.Shapes(Application.Caller).TopLeftCellの戻り値は?

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

「ActiveSheet.Shapes(Application.Caller).TopLeftCell 返り値」
という検索キーワードでアクセスがありました。

ActiveSheet.Shapes(Application.Caller).TopLeftCellの戻り値

結論からお伝えすると、「ActiveSheet.Shapes(Application.Caller).TopLeftCell」は、アクティブなワークシート(ActiveSheet)上に存在する、このコードの書かれているプロシージャを呼んでいるShapeオブジェクト(.Shapes(Application.Caller))の、左上部分(.TopLeftCell)に存在するセルを表すRangeオブジェクトです。

上図の例で四角形からSubプロシージャを呼んでいるならば、B2セルを表すRangeオブジェクトです。

結論としては上記のとおりですが、
「ActiveSheet.Shapes(Application.Caller).TopLeftCell 返り値」
と検索なさった方は、Shape.TopLeftCellプロパティの戻り値だけでなく、「ActiveSheet.Shapes(Application.Caller)」の戻り値が何だったのかも、実はわかってらっしゃらないのではないかと想像しています。

Rangeオブジェクトを取得するコード「ActiveSheet.Shapes(Application.Caller).TopLeftCell」を、キーワードごとに読解しましょう。

「ActiveSheet」の読解

先頭の「ActiveSheet」は、グローバルメンバーのActiveSheetプロパティで、

アクティブなワークシートを表すWorksheetオブジェクト、またはグラフシートを表すChartオブジェクトを返します。そのためオブジェクトブラウザーの詳細ペインには「As Object」と表示されています。

ActiveSheetプロパティの定義としてはWorksheetまたはChartオブジェクトを返すのですが、「ActiveSheet.Shapes(Application.Caller).TopLeftCell」は、結局セルを表すRangeオブジェクトを返すので、ここではアクティブなワークシートを表すWorksheetオブジェクトを取得していることになります。

「ActiveSheet.Shapes」の読解

「ActiveSheet」につづく「.Shapes」は、Worksheetオブジェクトに用意されているShapesプロパティで、

今回の「ActiveSheet.Shapes」は、アクティブなワークシート上に存在する全図形を表すShapes(コレクション)オブジェクトを取得するコードになります。

「Application.Caller」の読解

つづいて「ActiveSheet.Shapes(Application.Caller)」のカッコ内「Application.Caller」を読解しておきましょう。

Application.Callerは、Excelを表すApplicationオブジェクトに用意されているCallerプロパティです。

Application.Callerの戻り値は、(厄介なことに)どこからCallされるかによって、実にさまざまです。そのためオブジェクトブラウザーの詳細ペインで戻り値が「As 〇〇」と明示されておらず、Variantになっています。

今回の「ActiveSheet.Shapes(Application.Caller)」の場合は、Application.Callerプロパティは、[マクロの登録]を行った、

Subプロシージャを呼び出すShapeオブジェクトの名前を返します。

例えば、マクロの登録されている図形の名前が「正方形/長方形 1」の場合、文字列「正方形/長方形 1」がApplication.Callerプロパティの戻り値です。

「.Shapes(Application.Caller)」の読解

「ActiveSheet.Shapes(Application.Caller)」の「.Shapes( )」は、Shapesコレクションの既定メンバーである_Defaultプロパティを呼んでいるコードです。

「.Shapes(Application.Caller)」の場合、引数に指定されているApplication.Callerで特定されるShapeオブジェクトを取得できます。

例えば、マクロの登録されている図形の名前が「正方形/長方形 1」の場合、
  ActiveSheet.Shapes(Application.Caller)
は、
  ActiveSheet.Shapes("正方形/長方形 1")」
という意味になり、「正方形/長方形 1」図形を表すShapeオブジェクトを取得できます。

「ActiveSheet.Shapes(Application.Caller).TopLeftCell」の読解

「ActiveSheet.Shapes(Application.Caller)」は、アクティブなワークシート上に存在している、このコードの書かれているプロシージャを呼んでいるShapeオブジェクトを取得するコードですから、最後の「.TopLeftCell」は、Shapeオブジェクトに用意されているTopLeftCellプロパティです。

Shape.TopLeftCellプロパティは、Shapeオブジェクトの左上部分に存在するセルを表すRangeオブジェクトを返します。

以上のとおり、検索キーワード
「ActiveSheet.Shapes(Application.Caller).TopLeftCell 返り値」
の回答としては、アクティブなワークシート上に存在している、このコードの書かれているプロシージャを呼んでいるShapeオブジェクト左上部分に存在するセルを表すRangeオブジェクトです。

コードを読み解くトレーニングをしましょう

拙著『いちばんやさしいExcel VBAの教本』や『いちばんやさしいPowerPoint VBAの教本』では、オブジェクトを取得・操作するコードを読解する下図のような図版を大量に入れています。

『いちばんやさしいExcel VBAの教本』P.239より

マクロを作り始めたばかりの頃は、どこかで見つけたコードを真似することによって、アプリケーションが自動的に動くことがとても楽しいと思うのですが、意味もわからないままコピー&ペーストしたり書き写したりを繰り返しても、自分の力でマクロを作れるようにはなりません。

オブジェクトを取得・操作するコードの単語ごとに何を返すのか、何を行っているコードなのか(腹を決めて)オブジェクトブラウザーを引きながら、しっかりと読解するトレーニングが必要です。

最初は面倒に感じるかもしれませんが、頑張りましょう。コードがちゃんと読めるようになると、楽しいですよ。

最終更新日時:2020-04-16 13:44

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » ActiveSheet.Shapes(Application.Caller).TopLeftCellの戻り値は?

「Shapesコレクション・Shapeオブジェクト」の記事一覧

検索


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

.