• 締切済み

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