• ベストアンサー

[EXCEL]今触っているセルの真横にオリジナルフォームを表示したい

ちょっとした 入力支援ツールを作ろうとしております。 今入力中のセルの横に 作成したフォームを表示させ 入力の支援としたいのです。 ですが、ぜんぜん位置が合いません UserForm1.topと ActiveCell.topを合わせたのですが かなりずれてしまいます。 (まだ横方向は試していません) また、 画面下部のギリギリのセルを選ぶと フォームが途中で切れてしまうと思います。 これらを何とかしたいです。 問題点としては (1)アクティブセルの真横にくっつくようにフォームを表示したい (2)下のほうのセルを選んだときにフォームが切れないようにアクティブにズラして表示したい。(とりあえず縦方向だけでも) の2点です。 よろしくお願いします。

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

  • ベストアンサー
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

(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)
回答No.3

(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段階に飛ばすと画面の左上でアクティブになります

maki_hiro
質問者

お礼

ありがとうございました。

maki_hiro
質問者

補足

すみません 説明が不十分でした。 シートを動かさずに フォームが隠れないように上へずらすイメージです。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

#1です。 やっぱりだめですね。 行高、列幅を弄ってあるセルの前後では ずれてしまいました。

maki_hiro
質問者

お礼

多分、横のズレは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

関連するQ&A