アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel UserForm を選択セルの右下に表示させたいのです。

皆様こんばんわ。
セル選択を(例)B5:F5とし、右クリックでユーザーフォームを表示させているのですが
最後のセルF5の右下にユーザーフォームの左上がくる様な表示方法はあるのでしょうか?

Set Area = Selection
With UserForm1
.StartUpPosition = 0
.Top = 400
.Left = Area.Left + Area.Width
.Show vbModeless
End With

などと行っていますが、エクセル画面の最大表示とそうでない場合とで表示位置が異なってしまいます。
ウィンドウズのエリアとエクセルのエリアで座標が異なるのかなぁと思いつつ。。。
良いアイデア(?)が浮かびません。

良い方法が御座いましたら
皆様、宜しくご教示願います。

A 回答 (3件)

#1、#2です。


修正しました。これでたぶんどこのセル範囲でも大丈夫だと思います。
なお画面の右の方だったり下のほうだったりした時にユーザーフォームが切れるのは直していませんので悪しからず。
----------------

Sub test()
Dim x As Long
Dim y As Long
Dim str As String
Dim rng As Range
Dim adr As String

str = Selection.Address
If InStr(str, ":") = 0 Then
adr = str
Else
adr = Mid(str, InStr(str, ":") + 1, Len(str) - InStr(str, ":"))
End If

Set rng = Range(adr).Offset(1, 1)

x = ActiveWindow.PointsToScreenPixelsX(0) * 72 / 96 + rng.Left * ActiveWindow.Zoom / 100
y = ActiveWindow.PointsToScreenPixelsY(0) * 72 / 96 + rng.Top * ActiveWindow.Zoom / 100

Load UserForm1

With UserForm1
.StartUpPosition = 0
.Left = x
.Top = y
End With

UserForm1.Show

End Sub
    • good
    • 3
この回答へのお礼

昨日の今日で。。お忙しい中、完璧なご回答をありがとう御座いました♪
さらりと書いてあるコードですが、全く思いつく所が無く感服しております。
また別質問する際は宜しくお願い致します<(_ _)>

ご覧頂いてご検討して頂いた方々もいらっしゃるかと思いますが
ありがとうございました。

お礼日時:2013/09/04 21:56

#1です。


先ほどのコードで
Set rngの行がちょっとまずかったです。選択範囲の右下セルの行番号もしくは列記号が2桁以上だと誤動作もしくはエラーになると思います。
修正版をまた投稿させていただきたいと思いますので、しばしお待ちを。
    • good
    • 2
この回答へのお礼

修正版をお待ち致します~♪
こんなに早くご回答頂けるとは思っていませんでしたので
しばらくしば~らくお待ち申し上げます。

誠に恐縮ですが宜しくお願い致します^^

お礼日時:2013/09/03 22:13

手抜きなところが多々ありますが、こんな感じでどうでしょうか。


セル範囲選択してマクロ実行するとフォームが選択範囲の右下に表示されます。
選択範囲が画面の右のほうだったり下のほうだったりするとユーザーフォームが見切れて表示されてしまいますのでご注意を。

---------------------

Sub test()
Dim x As Long
Dim y As Long
Dim str As String
Dim rng As Range

str = Selection.Address
Set rng = Range(Right(str, 4)).Offset(1, 1)

x = ActiveWindow.PointsToScreenPixelsX(0) * 72 / 96 + rng.Left * ActiveWindow.Zoom / 100
y = ActiveWindow.PointsToScreenPixelsY(0) * 72 / 96 + rng.Top * ActiveWindow.Zoom / 100

Load UserForm1

With UserForm1
.StartUpPosition = 0
.Left = x
.Top = y
End With

UserForm1.Show

End Sub


--------------
私もいろいろ調べながら書いてみましたので、細かいところのフォローはできかねますのでご容赦ください。
    • good
    • 0
この回答へのお礼

早速のご教授ありがとう御座います♪
しかも貴重なお時間を割いてお調べ頂いて感謝です<(_ _)>
更に、ご回答後に検証までして頂き感激です。

x=・・・ y=・・・ の部分は、こんなこと出来るんだと。。。

お礼日時:2013/09/03 22:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A