こんにちは。エクセルVBAの初心者です。
エクセルでシート上のマウスポインタの座標を取得する方法はありますか?色々やってみたのですがわからない感じです。もし分かれば教えてください。お願いします。
セルのアドレスではなくて、ポイント数で知りたい感じです。
マウスのモニタ座標とフォーム上での座標はなんだか色々調べたら取得することが出来た感じなのですが、シート上の座標をポイント数で取得することができない感じです。
なんかモニタ座標は型がLong型で、エクセルのシートのポイントはDouble型なので互いに採用しているポイントと単位が違うので全く別物だろうとは思いますが、一番うれしいのはエクセルシートのポイントが分かること、次が、ウィンドウのサイズや位置に左右されない、アクティブウィンドウのローカル座標(とか言えばいいのでしょうか?)が知れたらうれしいです。
すみません。分かる人、どうか教えてください。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
こんばんは。
>GetCursorPos
それで、思い出したのですが、マウスの座標は、Applicationの左端の上が、(0,0) だから、Windowとの差を取ればよいと思ったのです。もちろん、シートは、全画面にしておきます。しかし、気が付いたのは、Applicationの左端上からシートの端の距離までが、ツールバーなどが、入ったりするので、一定ではありません。それでダメだとしました。シートの左端上を(0,0)とする方法がどうしても見つかりませんでした。
図形描画の座標位置が存在するのですから、ローカルのシートのスクリーン座標はあってよいはずだと思うのですが、いろいろやってみたのですが、出来ませんでした。VBのFormなどとは構造的には違うものなのでしょうね。APIからは届かないのです。VBだと、Formの全体と個々のローカルの位置が取れますね。
#(代用としては、大きなオートシェイプを置けば、マウスのローカルの座標は取れます)
これは、コントロールツールのラベルでした。すみません。
Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
MsgBox "Y: " & y & " X: " & x
End Sub
ここに、X, Y がありますね。イベントは、他でよいです。大きなラベルを置いてローカル座標を使うわけですが、ただ、私にとって、お遊び程度しかないような気がしました。
ずいぶん、2年に渡って、私は挑戦したのですが、この程度しか結果は得られていません。もう少し、別の勉強が必要のようです。
色々ありがとうございますです!
なんか普通に考えてできそうなのに、微妙にどうも出来ないのは何か理由があるのかもしれないですね。
>Applicationの左端の上が、(0,0) だから、Windowとの差を取ればよいと思ったのです。
これ分かります。私もこれを考えました。方法は同じ感じなのですが、初期化として最初はSetCursorPosでマウスを0,0から1ポイントずつムリにガガーーーって動かして、さらにRangeFromPoint(なぜかこれはモニタ座標を指定する感じです)をその間ずっとチェック、してRangeFromPointにRange("a1")が帰ってきた瞬間のモニタ座標をチェックすると、これがシート上の(x,y)=(0,0)になって、これでモニタ座標から概ねのシート上の座標がとれる感じ、よっしゃなんかできそう!と思ったのですが、ウィンドウサイズや位置が変わったら駄目になってしまうし、さらにいうと、シートをスクロールしただけで駄目ですこれ。だからせめてアクティブウィンドウ上のローカル座標が分かれば良いなあって思った感じです!
VBAでゲームなんかを作っている場合、コードは実際には見ていないですが、なんかマウスの座標をちゃんと取得しているような節があるので、きっと方法はあると思うのですが、ちょっと勉強することにしますです。どうもありがとうございました。
No.1
- 回答日時:
こんばんは。
>マウスのモニタ座標とフォーム上での座標はなんだか色々調べたら取得することが出来た感じなのです
基本的には、モニタ座標も出来なかったと思いますね。あくまでも、アプリケーション内の位置だ、アプリケーションの左端上を0,0 だったと思います。どのような方法をおっしゃっているか分かりませんが、マウスのポインタのモニタ座標を取ろうとすると、アプリケーションが不安定になったような気がします。(代用としては、大きなオートシェイプを置けば、マウスのローカルの座標は取れます)
Excelの場合、ローカル座標(その使い方は正しいと思います)は、マウスからではなくて、セルから座標をとりますね。VBとは違いますので、コントロールから直接取得できません。(できるかもしれませんが、かなり危ない)
私は、ずいぶんトライしたけれども、満足する結果が得られませんでした。もしかしたら、どなたか、出来るかもしれません。(VBでは簡単なことでも、Excel VBAでは難しいし、危険を冒すほどのこともないので、私は、諦めました。)
それで、Rangeオブジェクトの、Top, Left, Width, Height から行います。
この回答への補足
こんばんは。ご回答ありがとうございます!大変参考になります。いくつかご回答いただいた内容に補足と質問をさせていただきますです。
>基本的には、モニタ座標も出来なかったと思いますね。
多分私の記述の仕方が悪かったです。エクセルとかなんとかアプリケーションに依存しない、純粋なモニタ上の座標の取得がAPI関数のGetCursorPosというのを利用してできたという感じです。失礼しました。
>大きなオートシェイプを置けば、マウスのローカルの座標は取れます
これはポイントで取得できますでしょうか?昨日ちょっと調べたときに、RangeFromPointという関数を見つけたのですが、これは指定したポイントを含むセルまたはオートシェイプを返すというものでした。オートシェイプ上の座標を取得できれば、何か道が開けるかもです。可能であればご提示ください。お願いします!
すみませんが、どうぞよろしくお願いいたします!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- 物理学 角運動量の式変形が分かりません。 4 2022/08/03 21:04
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- 数学 線形代数の問題について教えて欲しいです。 3 2023/05/06 23:13
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- その他(自然科学) 光を保存する方法 8 2023/01/31 10:07
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
グラフのX,Y座標を取得したい
Excel(エクセル)
-
Excelのシート上のShapeにイベントは設定できる?
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
エクセル vba クリック~離した位置へ直線の挿入
Visual Basic(VBA)
-
5
エクセルVBAで画像を貼り付ける座標設定方法は?
PowerPoint(パワーポイント)
-
6
Excel VBAでマウスの左クリックのイベントを検知するには
Visual Basic(VBA)
-
7
ダブルクリックしたセルの近くにユーザーフォームを表示したい
Excel(エクセル)
-
8
VBAでオブジェクトが選択されているかどうかを判定する方法
Excel(エクセル)
-
9
Excel(VBA)
Excel(エクセル)
-
10
エクセルのマクロでSelection.Shaperangeを使用した時のエラーについて
Visual Basic(VBA)
-
11
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
3次元空間上の2つの座標から...
-
マインクラフト(pc版)で座標...
-
始点、終点の二つの座標と半径...
-
エクセルである点からの距離で...
-
以下のプログラムは重心を求め...
-
閉図形の座標の配列が右回りか...
-
ダイアログ内コントロールの位...
-
OpenGLの線の太さ
-
運動のプログラムをおしえてく...
-
エクセルで回転する座標の出し方
-
オートシェイプ円弧の中心点、...
-
Fortranで直交座標から極座標変...
-
Excel VBAでマウス移動&ダブル...
-
緊急 ベーシックで国旗の作り方...
-
Excel VBA で自在に図形を変化...
-
GLで座標を変えて回転させたい
-
ワード上Shapeの位置情報を統一...
-
四角形の当たり判定についての...
-
C言語で制作するピラミッドアー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
エクセルである点からの距離で...
-
エクセルで回転する座標の出し方
-
3次元空間上の2つの座標から...
-
始点、終点の二つの座標と半径...
-
c言語でキーボードから2点の座...
-
閉図形の座標の配列が右回りか...
-
以下のプログラムは重心を求め...
-
交差する2線分の交点座標の求め方
-
y=x^2の座標をプロットするプロ...
-
ダイアログ内コントロールの位...
-
シーケンサー(PLC?)で制...
-
ガウシアンフィルタのCプログラム
-
多角形の内部かどうか判定する方法
-
直線上にある点の座標の求め方
-
エクセルシート上のマウスポイ...
-
OpenCvSharp4による画像判定解...
-
C言語 配列で座標
-
ピクチャボックスの座標取得
おすすめ情報