• 締切済み

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

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

みんなの回答

回答No.3

>ご教示頂いたコードは、ウィンドウのLeftプロパティを基準に決め打ちで調整しているからです。 ActiveSheet.Application.Windows(1).Left - .Width / 3 このことについて言っていらっしゃるようですが、これが、「決め打ち」のコードなのでしょうか。 「決め打ち」の用語の使い方が変だと思います。シートからというのは、シートのウィンドウのプロパティから取ります。逆に、Sheet から、ウィンドウを経ないで左位置をどうやって取るのですか。シート・オブジェクトそのものに、そんなプロパティがあったのでしょうか。 「決め打ち」というのは、プログラマ側本位の用語で、相手の環境が分からない場合に、その選択権を、プログラマに、予想的な数値などを予めまかせてしまうことです。主に、決まった選択肢がいくつかある場合に行うもので、それを、質問者さんから、こうした可変的な位置に対応しているのに、こちらに「決め打ち」と言われるようなものではないはずです。 そもそも、UserFormは、ある程度の位置に出てくるものを、細かい位置調整は、ユーザーさんが、マウスで決めているはずです。そうでなかったら、埋め込み型のActiveX コントロールなどを使えばよいと思います。 >例えば、シートの見出しを非表示にした場合、左下隅に表示されません。 もし、これが事実だとしたら、一体、どこにUserFormは行っているのか分かりませんが、こちらはそのようなことはありませんから、元のバージョンなどが違って誤動作するのかもしれません。それは、もう対応はしきれません。 もともと、ご質問には、そのようなバージョンや使用している情報やExcelの使い方などがまったくありませんが、Excel 97~2013までは、おそらくは同じ動作だとは思ってはいます。平均的な回答をしていますが、その確認をすべて取っているわけではありません。こちらは、現在、2010で対応しています。 >もしシート領域の左下隅の座標を取得できれば、 シート領域の左下隅というのは、Sheet の高さ(Height)分と左(Left)位置で決まるものですから、アプリケーションに対して、その位置はとれているはずです。もし、まったく左下隅というなら、 ActiveSheet.Application.Windows(1).Height ActiveSheet.Application.Windows(1).Left にすればよいです。ただし、UserFormの大きさは考慮していません。UserFormの大きさに、大雑把に、位置調整のために戻してきているのが、気に入らないのでしょうか。それとも、使用中に、シートの動きに合わせるということなのでしょうか? シートをその都度大きさを換えたり、シート見出しのあるなしの変化などに、調整させるということは現実の使用では、最初にその旨提示していただければ、ある程度は考えました。 プログラミング用語もご存知で、ご自身でVBAの開発もされているようですから、私や、掲示板などに頼らずに、ご自身で研究開発されるのが一番です。私の理解度は、この程度しかありませんし、ご質問者さんが、何をおっしゃっているのか、さっぱり理解できなくなっています。こちらのコードそのものにも、シートからなのに、プロパティがない所から、取得しろと言われると、これ以上は手がつきません。 実際に、#1の回答ぐらいは、たぶんVBAの書籍でも載っているはずで、ほとんどの方は、そのような平均的な回答で満足していただいています。できる見通しが立てば、かなり複雑なものでも開発して差し上げられますが、このように質問で、まったく見通しがつきませんので、これで、私からの対応は終わりにさせていただきます。ご要望には至らず、申し訳ありません。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

こんにちは。 #1の回答者です。 >ご教示頂いた方法で、全てのパターンに合わせて調整することもできますが マクロは、試してみていただけたのでしょうか。どのような状態であれ、Excelのアプリケーション枠の左隅下に行くはずです。ふつう方は、それで問題ないはずです。 >'←位置を(±数字 で)調整してください。 とマクロの中で書いたのは、微調整の意味であって、手作業でその都度調整するという意味ではありません。それは、試していただいた方なら、お分かりになっているはずです。 >表示位置を常にシートの左下隅に表示されるためです。 シートを見えないほど小さい状態から、最大化まであります。 シートの左下隅というのは、何かの間違いではないでしょうか。シートの大きさは、アプリケーション枠一杯(最大化)にしていない状態では、シートの大きさは可変ですから、いろんな状態のシートの左隅下に移動します。つまり、UserFormは、アプリケーションの真ん中もあるということです。常識的には、アプリケーションの左隅下で十分だと思います。 一応直しましたが、「つらいち」にはなりません。まあまあ、シートの左隅下には収まります。これも、やはり微調整は必要ですが、この先は、ご自身で考えてみてください。 よろしくおねがいします。 '// 基本的には標準モジュールですが、シートモジュールでも可 Sub Test2() 'シートの左下隅に    With UserForm1     .StartUpPosition = 0     .Top = ActiveSheet.Application.Windows(1).Height - .Height / 2     .Left = ActiveSheet.Application.Windows(1).Left - .Width / 3     .Show 0   End With End Sub '//

popporunga
質問者

お礼

ご回答ありがとうございます。 >表示位置を常にシートの左下隅に表示されるためです。  誤字がありました。正しくは「表示位置を常にシートの左下隅に表示させるためです」  失礼しました。 >どのような状態であれ、Excelのアプリケーション枠の左隅下に行くはずです。ふつう方は、それで問題ないはずです。  例えば、シートの見出しを非表示にした場合、左下隅に表示されません。  ご教示頂いたコードは、ウィンドウのLeftプロパティを基準に決め打ちで調整しているからです。  見出しの有無はDisplayHeadingsプロパティで確認できますが、やはり都度調整していくしかありません。  もしシート領域の左下隅の座標を取得できれば、見出しの有無やステータスバーの有無を  意識する必要がなくなるので、その方法を求めています。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

こんにちは。 以下のようなことでしょうか。UserFormの座標を取る方法は、Win32APIだったと思いますが、UserFormの表示とは、直接関係がないような気がします。 '// Sub Test1() '左下隅に    With UserForm1     .StartUpPosition = 0     .Top = Windows.Application.Height - .Height     .Left = Windows.Application.Left '←位置を(±数字 で)調整してください。     .Show 0   End With End Sub

popporunga
質問者

お礼

ご回答ありがとうございます。 座標を取る理由は、全画面表示に切り替えるなど環境が変化しても 表示位置を常にシートの左下隅に表示されるためです。 ご教示頂いた方法で、全てのパターンに合わせて調整することもできますが なるべく環境に依存しない作りにしたいのです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

  • エクセルのセルの座標の取得

    エクセルであるセルの左上の座標と右下の座標の取得方法ってご存知のかたいらっしゃいませんか? 宜しくお願いいたします。

  • エクセルの座標系について

    現在VB2008からエクセルにグラフを表示するプログラムを作成しているのですが、 グラフ等を作成するときにエクセルの座標を指定して作成とnullのですが、 X2 = xlApp.Selection.Left Y2 = xlApp.Selection.Top で現在のセルの座標を取得して、 xlPageSetup = xlSheets("Sheet1") MyCharts = xlPageSetup.ChartObjects MyChart = MyCharts.Add(0, 0, X2, Y2) でグラフ等を作成してもグラフの位置が若干ずれてしまいます。 こういった現象がなぜ発生するのかは不明で、正確な座標入力でグラフを並べることがかなり困難な状況です。 なにかほかに手順があるのでしょうか?

  • Excel画面の左下隅のコメント操作

    お世話になります。 Excel画面の左下隅に普段は「コマンド」と出ていて、入力時には「入力」と表示するエリアがあります。 ここをVBAで任意に設定したいのですが、どのように行うのでしょうか。 宜しくお願いします。

  • Visual C++ 2008 Express Editionでの カーソル座標取得

    こんにちは.素人の質問ですがどなたか教えてください. Visual C++ 2008 Express EditionのWindowsフォームアプリケーションで,マウスカーソルの位置座標を取得して,その値を画面に表示させることをやりたいと思っています.マウスカーソルの位置座標取得にはGetCursorPos()関数を使用すると調べたのですが,Windowsフォームアプリケーションのプログラム中でどのように使用すれば良いのか分かりません. 宜しくお願いします.

  • Iphonで(座標)位置情報を取得できますか

    Iphonで位置情報を取得する時にグーグルの座標位置を表示させる方法というのは ありますでしょうか 宜しくお願いします

  • AutoCADで座標の表示について

    AutoCAD2000LTです。 指定の座標にオブジェクトの移動や回転等のあと、位置確認をしようとツール-位置情報を行ってみると、 -3.01376E+07 -3.95170E+07 のように表示されてしまいます。 左下の常に表示されている座標はもちろん、テキストウインドウにも上記で表示されてしまいます。 会社の他の会社のパソコンで同じ作業をしてみたところバージョンは同一のAutoCADなのに指定した座標どうりにテキストウインドウで表示されました。 自分のもきちんと表示させたいのですが、解決方法よろしくお願いします。

  • エクセルのシート名が表示されない

    エクセルを開いた時にシート左下部にシート名が表示されますが、シート名が表示されずにシートだけ表示され困っています。(開いたエクセルにある他のシートがシート名のタグが表示されていないので開けない) シート左下部のシート名の再表示の方法を教えてください。 宜しくお願いします。

  • エクセルのシート1や2が見えない?

    お詳しい方どうぞよろしくお願いします。 エクセルの資料が送られてくるのですが、 画面左下に通常なら表示されているはずの SHEET 1 SHEET 2 のタブが表示されていません。どうしたら表示できますか?

  • C#別フォームの座標が取得できません

    メインフォームとサブフォームを作って メインフォームのボタンを押すと サブフォームをメインフォームの近くに出現させるために メインフォームの座標を取得して それをサブフォームに入れて出現させたいのですが メインフォームの座標がうまく取得できません 多くに記事にthis.Locationで取得できると記載 されているのですが、Console.WriteLine();で見ると 値が0になってしまっています 何かいい方法はないでしょうか? よろしくお願いします。

専門家に質問してみよう