top of page

​タグ一覧

配列処理(73)

階層化フォーム(33)

ファイル操作(28)

開発事例(22)

シート・セル操作(18)

図形操作(13)

コード自動生成(10)

ユーザーフォーム(9)

文字列操作(8)

設計思想(7)

開発効率化(6)

数学(6)

GAS(5)

アニメーション(5)

技術解説(4)

講座実施報告(5)

イミディエイトウィンドウ(4)

Googleスプレッドシート(4)

副業(4)

クリップボード(4)

条件付き書式(4)

その他(4)

ココナラ(3)

小説(3)

HTML(3)

JavaScript(3)

OneDrive(2)

イベントプロシージャ(2)

Enum(2)

PDF(2)

フリーランス(2)

リスキリング(2)

Outlook(2)

介護(2)

Discord(2)

シフト表(2)

LookerStudio(2)

日報(2)

カレンダー(2)

罫線(2)

パズル(2)

小ネタ(2)

コード解説(2)

クラスモジュール(2)

ステータスバー(1)

コード解析(1)

バックアップ(1)

可変長引数配列(1)

ブック処理(1)

スクレイピング(1)

スプレッドシート(1)

coconala(1)

リボン登録マクロ(1)

QRコード(1)

実行予約(1)

給与計算(1)

VBA不使用(1)

リボン(1)

超勉強会(1)

スピログラフ(1)

図名描写(1)

連想配列(1)

溶接ロボット(1)

保育士(1)

楽天市場(1)

経理(1)

医療(1)

文書作成(1)

発注書(1)

ショートカット(1)

WebAPI(1)

色操作(1)

スーパー開発ショートカット(1)

ライブラリ処理(1)

放課後等デイサービス(1)

児童福祉支援(1)

学校(1)

UI(1)

CAD(1)

カーソル操作(1)

GetXYDocumentFromCursor|マウスでクリックした座標(ドキュメント座標)を取得する | Excel VBA

GetXYDocumentFromCursor|マウスでクリックした座標(ドキュメント座標)を取得する | Excel VBA

<概要 マウスでクリック位置の座標取得>

GetXYDocumentFromCursorは、現在のマウスカーソル位置から、Excelシート上のドキュメント座標(Left / Top基準)を取得するための汎用プロシージャです。


スクリーン座標として取得したカーソル位置を、カーソルが乗っているセルの四隅のスクリーン座標とドキュメント座標の対応関係から補間計算し、セル内の正確な位置をドキュメント座標として算出します。


図形配置、マウス操作連動処理、独自UI制御など、セル単位では足りない精度の座標処理を行いたい場面で利用できます。


<ドキュメント座標の解説>

本プロシージャ GetXYDocumentFromCursor を理解するために、事前知識として 「ドキュメント座標」 について説明します。

Excelには、位置を表す座標系が大きく分けて 2種類 存在します。


1. スクリーン座標

スクリーン座標は、表示されているモニターの左上を原点 (0, 0) とする座標系です。

  • マウスカーソルの位置

  • Windows API(GetCursorPos など)で取得できる座標

これらはすべて スクリーン座標 で表されます。

図中では(Sx, Sy) がスクリーン座標に該当します。


2. ドキュメント座標

一方、ドキュメント座標は、Excelワークシート全体を基準とした座標系 です。

  • 原点は シート全体の A1 セル左上

  • スクロールやウィンドウ位置の影響を受けない

  • 図形・Shape・OLEObject の配置基準になる座標

図中では(Dx, Dy) がドキュメント座標に該当します。


スクリーン座標とドキュメント座標は「別物」

重要なポイントとして、

  • Windows API で取得できるのは スクリーン座標

  • Excelの図形配置で使われるのは ドキュメント座標

というように、両者は完全に別の座標系 です。

そのため、

マウスカーソルの位置を基準にExcelシート上で正確に図形を配置したい

といった処理を行う場合、スクリーン座標 → ドキュメント座標への変換 が必須になります。


ドキュメント座標の解説

座標の向きについての補足

なお、座標の向きについて補足しておきます。

一般的な数学の座標系では、左右方向が X 軸方向、上下方向が Y 軸方向、というイメージが一般的です。


一方で本記事では、以降の説明や補間計算を分かりやすくするために、「下方向を X の正方向」「右方向を Y の正方向」という向きで座標を捉えて説明します。


このように座標の向きを整理することで、一般的な数学の座標系と比べると、XY 平面を −90 度回転させたような見え方になります。

ただし本記事では、補間計算や座標変換の式をできるだけ単純に保つため、X・Y ともに正方向の値として扱える向きで説明しています。


これにより、符号の反転や条件分岐を増やすことなく、座標計算の流れを直感的に追えるようになります。


<実行例>

 実行例のサンプルコードは次の通りです

 本サンプルコードは、ワークシート上でセルを選択したタイミング をトリガーとして処理が実行されます。ワークシートのコードウィンドウに実行サンプルのコードをそのまま貼り付けてみてください。

 ちなみに、ワークシートのコードウィンドウは、下記の図のような手順で簡単に表示ができるので試してみてください。


ワークシートのコードウィンドウの表示方法

 コードは、対象となるワークシートのWorksheet_SelectionChange イベントプロシージャ に記述します。そのため、どのセルを選択してもイベントが発動します。

実際の動作としては、シート上の任意のセルをクリックすると、クリックしたマウスカーソル位置を中心として円が作図されます。

この円の作図位置は、セルの中央ではなく、実際にクリックしたカーソル位置 を基準にしている点が特徴です。

そのため、同じセルをクリックした場合でも、クリックする位置によって円の表示位置が微妙に変わることが確認できます。


下記動画は、シート上のさまざまな位置をクリックした結果、それぞれのカーソル位置を中心に円が作図されている例です。

このように、GetXYDocumentFromCursor を使用することで、セル単位ではなく、より細かな座標単位での作図やUI制御 が可能になります。




<関連記事>

 今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。

 コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。


<コード>


Excel VBAによる業務自動化・ツール開発をご検討の方へ

​"脱Excel"の前に、現状のExcelの潜在能力を120%発揮してみませんか?

Softex-Celware

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page