top of page

​タグ一覧

配列処理(76)

シート・セル操作(34)

階層化フォーム(33)

ファイル操作(31)

開発事例(26)

図形操作(24)

設計思想(14)

講座実施報告(12)

ユーザーフォーム(10)

開発効率化(10)

コード自動生成(10)

数学(9)

ココナラ(9)

文字列操作(8)

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

GAS(7)

Webアプリ(6)

その他(5)

アニメーション(5)

副業(5)

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

OneDrive(4)

技術解説(4)

条件付き書式(4)

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

クリップボード(4)

介護・福祉(4)

小説(3)

JavaScript(3)

HTML(3)

公開ツール(3)

クラスモジュール(2)

コード解説(2)

パズル(2)

小ネタ(2)

日報(2)

フリーランス(2)

シフト表(2)

Antigravity(2)

PDF(2)

カレンダー(2)

Enum(2)

LookerStudio(2)

リスキリング(2)

Discord(2)

Outlook(2)

デスクトップアプリ(2)

スクレイピング(1)

WebAPI(1)

PowerShell(1)

文書作成(1)

スプレッドシート(1)

経理(1)

超勉強会(1)

溶接ロボット(1)

楽天市場(1)

VBA不使用(1)

実行予約(1)

CAD(1)

給与計算(1)

QRコード(1)

医療(1)

python(1)

学校(1)

発注書(1)

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

1月28日
読了時間: 4分
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ロゴ 透過 横長.png

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

  • Facebook
  • Twitter
  • YouTube

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

bottom of page