- ベストアンサー
[EXCEL]今触っているセルの真横にオリジナルフォームを表示したい
ちょっとした 入力支援ツールを作ろうとしております。 今入力中のセルの横に 作成したフォームを表示させ 入力の支援としたいのです。 ですが、ぜんぜん位置が合いません UserForm1.topと ActiveCell.topを合わせたのですが かなりずれてしまいます。 (まだ横方向は試していません) また、 画面下部のギリギリのセルを選ぶと フォームが途中で切れてしまうと思います。 これらを何とかしたいです。 問題点としては (1)アクティブセルの真横にくっつくようにフォームを表示したい (2)下のほうのセルを選んだときにフォームが切れないようにアクティブにズラして表示したい。(とりあえず縦方向だけでも) の2点です。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
(1)だけしか満たしてませんが・・・。 一つのPCでしか検証してませんので、不具合が出る可能性はぬぐえません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Application UserForm1.Left = .Left + .Width - ActiveWindow.Width + (ActiveCell.Offset(, 1).Left + ActiveCell.Offset(, 2).Left) / 2 UserForm1.Top = .Top + .Height - ActiveWindow.Height + ActiveCell.Top End With End Sub
その他の回答 (2)
- web2525
- ベストアンサー率42% (1219/2850)
(2)に関してですが、いったんアクティブセルを他のセル(画面表示外)にずらして再度アクティブにすれば画面中央に表示されます。 With ActiveCell .Offset(50, 50).Activate .Activate End With こんな感じで。 Sub test2() With ActiveCell .Offset(50, 50).Activate .Offset(14, 6).Activate 'この数値は画面表示されている行列の半分の数値を .Activate End With End Sub こんな感じで2段階に飛ばすと画面の左上でアクティブになります
- marbin
- ベストアンサー率27% (636/2290)
#1です。 やっぱりだめですね。 行高、列幅を弄ってあるセルの前後では ずれてしまいました。
お礼
多分、横のズレは0列目の幅の分だと思うので固定値を入れたら うまくいきました。 ずらしの方もmarbinさんのを元に工夫したらうまくいきました。 ありがとうございました。 With Application UserForm1.Left = .Left + .Width - ActiveWindow.Width + (ActiveCell.Offset(, 1).Left + 30) UserForm1.Top = .Top + .Height - ActiveWindow.Height + ActiveCell.Top If (UserForm1.Top + UserForm1.Height > .Top + .Height) Then UserForm1.Top = .Top + .Height - UserForm1.Height End If End With
お礼
ありがとうございました。
補足
すみません 説明が不十分でした。 シートを動かさずに フォームが隠れないように上へずらすイメージです。