エクセルシート上のマウスポインタ座標の取得方法と注意点

このQ&Aのポイント
  • エクセルシート上でマウスポインタの座標をポイント数で取得する方法について説明します。
  • モニタ座標とシート上の座標は異なるため、注意が必要です。
  • シート上のマウスポインタ座標を取得するためのVBAコード例も紹介します。
回答を見る
  • ベストアンサー

エクセルシート上のマウスポインタ座標の取得

こんにちは。エクセルVBAの初心者です。 エクセルでシート上のマウスポインタの座標を取得する方法はありますか?色々やってみたのですがわからない感じです。もし分かれば教えてください。お願いします。 セルのアドレスではなくて、ポイント数で知りたい感じです。 マウスのモニタ座標とフォーム上での座標はなんだか色々調べたら取得することが出来た感じなのですが、シート上の座標をポイント数で取得することができない感じです。 なんかモニタ座標は型がLong型で、エクセルのシートのポイントはDouble型なので互いに採用しているポイントと単位が違うので全く別物だろうとは思いますが、一番うれしいのはエクセルシートのポイントが分かること、次が、ウィンドウのサイズや位置に左右されない、アクティブウィンドウのローカル座標(とか言えばいいのでしょうか?)が知れたらうれしいです。 すみません。分かる人、どうか教えてください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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年に渡って、私は挑戦したのですが、この程度しか結果は得られていません。もう少し、別の勉強が必要のようです。

pa-pa-pa-
質問者

お礼

色々ありがとうございますです! なんか普通に考えてできそうなのに、微妙にどうも出来ないのは何か理由があるのかもしれないですね。 >Applicationの左端の上が、(0,0) だから、Windowとの差を取ればよいと思ったのです。 これ分かります。私もこれを考えました。方法は同じ感じなのですが、初期化として最初はSetCursorPosでマウスを0,0から1ポイントずつムリにガガーーーって動かして、さらにRangeFromPoint(なぜかこれはモニタ座標を指定する感じです)をその間ずっとチェック、してRangeFromPointにRange("a1")が帰ってきた瞬間のモニタ座標をチェックすると、これがシート上の(x,y)=(0,0)になって、これでモニタ座標から概ねのシート上の座標がとれる感じ、よっしゃなんかできそう!と思ったのですが、ウィンドウサイズや位置が変わったら駄目になってしまうし、さらにいうと、シートをスクロールしただけで駄目ですこれ。だからせめてアクティブウィンドウ上のローカル座標が分かれば良いなあって思った感じです! VBAでゲームなんかを作っている場合、コードは実際には見ていないですが、なんかマウスの座標をちゃんと取得しているような節があるので、きっと方法はあると思うのですが、ちょっと勉強することにしますです。どうもありがとうございました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 >マウスのモニタ座標とフォーム上での座標はなんだか色々調べたら取得することが出来た感じなのです 基本的には、モニタ座標も出来なかったと思いますね。あくまでも、アプリケーション内の位置だ、アプリケーションの左端上を0,0 だったと思います。どのような方法をおっしゃっているか分かりませんが、マウスのポインタのモニタ座標を取ろうとすると、アプリケーションが不安定になったような気がします。(代用としては、大きなオートシェイプを置けば、マウスのローカルの座標は取れます) Excelの場合、ローカル座標(その使い方は正しいと思います)は、マウスからではなくて、セルから座標をとりますね。VBとは違いますので、コントロールから直接取得できません。(できるかもしれませんが、かなり危ない) 私は、ずいぶんトライしたけれども、満足する結果が得られませんでした。もしかしたら、どなたか、出来るかもしれません。(VBでは簡単なことでも、Excel VBAでは難しいし、危険を冒すほどのこともないので、私は、諦めました。) それで、Rangeオブジェクトの、Top, Left, Width, Height から行います。

pa-pa-pa-
質問者

補足

こんばんは。ご回答ありがとうございます!大変参考になります。いくつかご回答いただいた内容に補足と質問をさせていただきますです。 >基本的には、モニタ座標も出来なかったと思いますね。 多分私の記述の仕方が悪かったです。エクセルとかなんとかアプリケーションに依存しない、純粋なモニタ上の座標の取得がAPI関数のGetCursorPosというのを利用してできたという感じです。失礼しました。 >大きなオートシェイプを置けば、マウスのローカルの座標は取れます これはポイントで取得できますでしょうか?昨日ちょっと調べたときに、RangeFromPointという関数を見つけたのですが、これは指定したポイントを含むセルまたはオートシェイプを返すというものでした。オートシェイプ上の座標を取得できれば、何か道が開けるかもです。可能であればご提示ください。お願いします! すみませんが、どうぞよろしくお願いいたします!

関連するQ&A

  • エクセルVBAでマウスの操作はできますか?

    エクセルVBAで、マウスのポインタを画面の中央にもってきたり、左クリックを押すという操作をさせたいのですが、無理ですか? sendkeyなんでしょうか…。画面の中央にマウスのポインタを持ってくるというのも、使用しているモニタによって座標が違うような気もしますが…。不勉強ですいません。 VBAの本を見ても、VBAのヘルプを見てもわかりませんでした。もともと無理な話なのでしょうか? 教えて下さい。よろしくお願い致します。

  • ポインタの座標表示について

    ポインタの座標表示について windowsXPを使っているのですが、モニタ中のポインタの座標をリアルタイムで表示させることはできないでしょうか? ウィンドウ中のポインタ座標を表示させるフリーソフトは見つけたのですがモニタ画面全体の座標を表示させるものを見つけることができませんでした。 ご教授お願いいたいます。

  • Excelグラフ内でのマウス座標の取得マクロ

    Excelの散布図のプロットエリア内でのマウス座標を取得するマクロを教えて下さい。 データのプロットだけでなく、プロットエリア内の任意の場所でのマウス座標です。 座標は画面の座標ではなく、グラフの軸の目盛での座標です。 よろしくお願いします。

  • マウスポインタが消える

    PC:Dell Optiplex 960SFF OS:Windows7 Pro メモリ:8G(増設) GPU:Radeon HD5450(デュアルモニタ用に増設) 症状: ・ある特定の操作を行うと、その操作を行ったウィンドウ上でマウスポインタが消える。 ・マウスポインタの表示が消えているだけで、一応クリックなどの操作は可能。 ・マウスポインタが消えたウィンドウを閉じても、次開けたウィンドウ限定だがマウスポインタがすでに消えている(症状が順番に感染していく感じ) ・症状が発生するウィンドウは同時に一つだけ(複数ウィンドウを開いていても、一つマウスポインタが消えるウィンドウがあれば、他のウィンドウのマウスポインタは消えない) 現時点で判明しているマウスポインタが消える操作 ・ファイルを選択し、Shift+Deleteを押す(この操作を行うと100%マウスポインタが消える) 今まで行ったこと ・マウス・GPUのドライバー更新 ・マウスの設定変更(デザイン・ポインタの軌跡等一通り試しました) ・違うマウスを使う ・AeroをOFFにする 以上です。原因・解決方法を教えて頂きたく。宜しくお願い致します。

  • マウスの位置をリアルタイムに取得

    マウスの座標を取得するようにjavascriptを組んだのですが、マウスポインタが移動していないときは座標取得処理をしないようにする方法を探しています。 マウスの座標を変数に保存して最新の座標と比較するようにして、座標が動いたら、座標を画面に表示させるようにできますでしょうか? マウスポインタの古い座標の保存法がわかりません。 よろしくお願い致します。

  • Excelのシート左下隅の座標を取得するには?

    Excelでユーザーフォームを、常にシートの左下隅に表示したいのですが この位置の座標を取得する方法はありますか?

  • 大きなマウスポインタを作りたい

    タイトルのとおり、大きなマウスポインタを作りたいと思います。 ■テキスト作成 WordやExcelなどのマニュアルを作っています。 画面をマウスポインタと共にキャプチャしながら取り込んでいるのですが、マニュアル化したときにマウスポインタが見にくいような気がします。 現在マウスポインタは、Windows XPで選択できる最大のものを使っていますが、もっと大きく目立つものがないかと思い、自分で作れないかと考えました。 また、Excelの選択やフィルハンドルなど独特ポインタを持つものは、小さくなってしまいます。 ツールを探しましたが見つけることができませんでした。 ご存知の方、お見えでしたら教えていただけますでしょうか?

  • マウスのポインターが飛ぶ

    パソコン初心者です。 Windows7のパソコン(NEC)を2年前に購入、マウスがダメになり、急きょELECOMの マウスを購入しましたが、マウスのポインターがときどき飛びます。 エクセル使用中にクリックして選択すると、いらないところまで選択され 使いづらくてこまっています。 USB使用のレーザーのマウスを使っています。(赤い光) 最近、赤い光のものは古いと言われ、また購入しようとおもいますが、 どこのメーカーのが一番使用しやすいか? 個人のご意見で結構ですので、お願いいたします。

  • マウスポインターの移動範囲

    Windows XpでマウスはLogitechのM-S48aを使用しています。 モニター画面に於いてマウスポインターが、”左側は画面左側一杯”に”右側は画面よりも遙かに右側にオーバー移動”し、時々ポインターがどこにあるか判らないことがあります。 マウスポインターの移動範囲を指定できる設定があるのでしょうか? その設定方法があれば教えて下さい。

  • マウスポインタが表示されない

    windows98でマウスポインタが表示されないのです。 表示されないだけで、マウスを動かしたり右クリックしたりすればアクションを起こすので、そこにポインタがあるのに表示されてないという感じです。safeモードでは表示されましたがその後、戻すとやはりないままです。解決方法を知っている方どなたか教えてください。

専門家に質問してみよう