• ベストアンサー

[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

  • VBA アクティブセルに対しての作業に関して

    -質問内容-VBA作成2つ- ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Activate アクティブセルを指定した段階で オフセット(縦下方向にO1991のセルに入れた数値分下に、ヨコに0) 移動しアクティブセルにする ------------------------------------------------------ ------------------------------------------------------ 別々のVBAでやりたいこと (1)これを、アクティブセルを指定した段階で セルの値をコピーして オフセット縦下にO1991.ヨコ0分下にペースト(貼り付け) したい 例)     A    1 成功  ←アクティブセルをコピー   3 成功  ← ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Activate  アクティブセル~オフセットしたセルまでを最初にアクティブセルからコピーし →アクティブセル~オフセットしたセルまでペーストする ----------------------------------------- (2)これを、アクティブセルを指定した段階で セルの値をコピーして オフセット縦下にO1991.ヨコ0分下に アクティブセル~オフセットされたセル位置まで フィルダウンさせたい 例)     A    1 1 ←アクティブセルをコピー   5  ←オフセットセル 2つのVBAのやり方/プログラムの表記/組み合わせ方を 無知で愚かな私ですが どうかご教授のほど 宜しくお願い致します (>_<)謝↓ペコッ --------------------------------------- --------------------------------------- 変数を使うのでしょうか? セル範囲を指定するとして Range("ActiveCell:ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Active") となるのでしょうか? 又変数の使い方として Dim a As Range 又は Dim a As Objectになるのでしょうか この際代入として使うには a = ActiveCell b = ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Activate になるのでしょうか 本当に度々申し訳ないのですが 宜しくお願いします (:>_<:)ペコリ Range(ActiveCell).copy ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0)ActiveCell.PasteSpecial End Sub

  • VBA アクティブセルに対しての作業に関して

    -質問内容-VBA作成2つ- ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Activate アクティブセルを指定した段階で オフセット(縦下方向にO1991のセルに入れた数値分下に、ヨコに0) 移動しアクティブセルにする ------------------------------------------------------ ------------------------------------------------------ 別々のVBAでやりたいこと (1)これを、アクティブセルを指定した段階で セルの値をコピーして オフセット縦下にO1991.ヨコ0分下にペースト(貼り付け) したい 例)     A    1 成功  ←アクティブセルをコピー   3 成功  ← ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Activate  アクティブセル~オフセットしたセルまでを最初にアクティブセルからコピーし →アクティブセル~オフセットしたセルまでペーストする ----------------------------------------- (2)これを、アクティブセルを指定した段階で セルの値をコピーして オフセット縦下にO1991.ヨコ0分下に アクティブセル~オフセットされたセル位置まで フィルダウンさせたい 例)     A    1 1 ←アクティブセルをコピー   5  ←オフセットセル 2つのVBAのやり方/プログラムの表記/組み合わせ方を 無知で愚かな私ですが どうかご教授のほど 宜しくお願い致します (>_<)謝↓ペコッ --------------------------------------- --------------------------------------- 変数を使うのでしょうか? セル範囲を指定するとして Range("ActiveCell:ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Active") となるのでしょうか? 又変数の使い方として Dim a As Range 又は Dim a As Objectになるのでしょうか この際代入として使うには a = ActiveCell b = ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Activate になるのでしょうか 本当に度々申し訳ないのですが 宜しくお願いします (:>_<:)ペコリ Range(ActiveCell).copy ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0)ActiveCell.PasteSpecial End Sub

  • 2つのセルを交互に切り替え表示したい

    アクティブセルの切り替えできますか? 現在選択セルに入力中、直前表示したアクティブセル内容を表示確認し、現在セルに戻り入力を続けたいのです。 ショートカットキーなどで。Excel 2000 です。

  • Excel2016でのユーザーフォーム

    Excel2016で入力規則リスト入力のドロップダウンリストを ユーザーフォームで実現しようとしています。 セル内容を中央に表示[A]して選択[B]される様にVBAを作りました。 時々1~5行上下して選択[B]されてしまうことがあります。 セル内容は中央に表示されているため[A]は問題なく機能しています。 デバッグ用にMsgBoxを挿入[C]すると問題なく選択されます。 何が原因なのかが分かりません、どうかご指導ください。 なお、ActiveCell.Value は必ず Sheet2!A2:A1222 内に存在します。 Private Sub UserForm_Activate() Dim n As Integer n = Range("Sheet2!A2:A1222").Find(what:=ActiveCell.Value, Lookat:=xlWhole).Row - 2 ListBox1.TopIndex = n - IIf(n >= 5, 5, 0) <----[A] ListBox1.ListIndex = n <----[B] 'MsgBox n <----[C] End Sub Private Sub ListBox1_DblClick(ByVal 中止 As MSForms.ReturnBoolean) ActiveCell.Value = ListBox1.Value Unload Me End Sub

  • Excel:コンボボックスの値をセルにセットする場合

    Excel2000を使っています。 コンボボックスで選択した内容をアクティブなセルに入力するために、以下のようなコードを作成しました。 (ユーザフォームにコンボボックスを1つ作成しています) ------------------------------------------ Private Sub UserForm_Initialize() ComboBox1.ColumnCount = 2 For I = 0 To 10 ComboBox1.AddItem Worksheets("元ネタ").Cells(I + 2,1).Value ComboBox1.List(I, 1) = Worksheets("元ネタ").Cells(I + 2,2).Value Next End Sub ------------------------------------------ Private Sub ComboBox1_Change() Worksheets("入力用").Activate ActiveCell.Value = ComboBox1.Text End Sub ------------------------------------------ このコンボボックスは、2列を表示させています。最後にセルに値を入力すると、今のコードでは1列目の値が入りますが、実際には2列目の値だけを入れたいんです。でもコンボボックスの選択時は、先頭列に1列目の値を表示させたいんです。 どうすれば、2列目の値をアクティブセルに入力できるでしょうか?

  • 【EXCEL】小数点のあるセルをみつける

    EXCELで、数字を入力してもらう入力用フォームを作成しているのですが、 フォーム内に、小数点を含んだ数字の入力をさせないようにしたいのです。 「データ>入力規則」で、小数点を使わせないように設定すると 直接入力すれば警告を表示させることができますが コピー&ペーストだとエラーが表示されず、入力ができてしまいます。 「書式>条件付書式」で、 小数点のあるセルの色を変えることも考えたのですが、 それだと、表全体から色の変わっているセルを探さなければならないので できれば関数などを使用して、選択した範囲内に小数点が含まれていたら 「小数点のある数字が入力されていますので、修正してください」 などの警告を、特定のセルに表示させたいのです。 ひとつのセルに小数点があるかどうかを調べる関数までは見つけたのですが、 複数のセル内から見つける方法がなかなか考え付きません。 何年越しの悩みです。 宜しくお願いいたします!

  • Excel VBA:フォーム←→セルのアクティブ切り替え

    vbModelessで表示したフォームとセルのアクティブを制御出来ないでしょうか? UserForm1.Show vbModeless range("A1").select ← ここでセルをアクティブにしたい(これでは駄目でした)                色々試したのですが、さっぱり分かりませんのでどなたかご存知でしたらお教え下さい。 よろしくお願いします。

  • Excel2000でデータフォームを自動的に表示させたいのですが・・・。

    初歩的な質問ですみません。 データ入力ミスを防ぐ為、Excelに付属されているデータフォームを使って ある表にデータを入力しようと思うのですが、フォームを表示する操作 (範囲選択をする⇒メニューの[データ]-[フォーム]コマンドを選択する) をマクロに登録して自動化しようとすると、"エラー1004 リストまたは 結合セルを含む範囲に対してこのコマンドは使用できません”というエラー メッセージが表示されてしまい、マクロを実行することができません。 マクロではなく、通常に操作するとフォームを表示することができます。 尚、データ範囲のどこにも結合されているセルはなく1行目は見出しを 入力しています。 マクロの自動記録で登録したのですがコードは     Range("A4:O31").Select     ActiveSheet.ShowDataForm    と記録されています。 私よりさらにExcelに不慣れな人が作業する為、ボタン1つでフォームが 表示できるようにしたいのですが・・・。 何か注意する点はあるのでしょうか? 教えてください。

  • セルの値が変化してもフォームの値が変わらない

    現在 次のようにセルの値を取得して表示座ていますが これですと もちろんユーザーフォーム立ち上げ時に表示しますが セルの値が変わった時 反映しません ユーザーフォーム立ち上げ時以外にも セルに連動して フォームの値を変えれるには どの様にすればいいでしょうか 初心者ですがよろしくお願い致します Private Sub UserForm_Initialize() 'ユーザーフォーム立ち上げ時に表示 TextBox1.Value = Range("N750").Value End Sub

  • 教えて下さい!!!セル(excel)書式を縦にした時の「ー」が縦になりません、、

    こんにちは。 タイトルの通りです。 例えば、セルに「ニューヨーク」と入力して書式を縦にしたいのですが、 「ー」だけ横のままで縦にならず不格好な書式になってしまいます。 新しいファイルを開き、同じ作業をするとしっかり縦になってくれるのですが、、。 何か設定がおかしいのでしょうか? どなたか詳しい方、何かお気付きの点がありましたら教えていただけませんか? どうぞ宜しくお願いいたします。

専門家に質問してみよう