「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の戻り値は?