• 締切済み

特定のセルをクリックしたらフォームを出現させたい

いつも回答して頂き、ありがとうございます。 特定のセルをクリックしたら、フォームが現れて、その特定セルを基準にして、フォームに入力された内容を各セルに記載していきたいと思っています。 この特定セルは、列は変わりませんが、行は変わります。 御教授の程宜しくお願い致します。 特定セルは黄色のセルです。赤枠で囲まれた部分が一つのフォーマットです。 下記が現状のフォームを出す記述です。 Sub 作業内容設定フォームの表示() 作業内容設定.Show End Sub

みんなの回答

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

> その下、更にその下の作業状態をアクティブにしても、 > フォームが出る様に出来ないものでしょうか? If Not Application.Intersect(Target, Range("B1:B13")) Is Nothing Then ここの範囲を変えれば良いだけですが? 別のフォームを表示するなら、 If Not Application.Intersect(Target, Range("B1:B13")) Is Nothing Then     処理1 ElseIf Not Application.Intersect(Target, Range("範囲")) Is Nothing Then     処理2 End If のように重ねてやれば良いです。 ちなみに「B列の最終行番号」を取得してやれば、一発でできる可能性は高いですね。 つまり・・・ Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim TRow As Long Application.EnableEvents = False     TRow = Cells(Rows.Count, 2).End(xlUp).Row     If Not Application.Intersect(Target, Range("B4:B" & TRow)) Is Nothing Then         作業内容設定.Show     End If Application.EnableEvents = True End Sub こんな感じでどうかなぁ、と。 あとは適宜応用ください。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

#1です。 B~E列にまたがっていて、各領域のB列は結合しているといった、見分ける手段があるなら下記の様にできるでしょう。 ところで、動作確認をしていて、各領域の先頭セルをActivateしようとしてはまってしまいました。ModalなUserForm表示の前にせよ、後にせよ、先頭セルをActivateする文を入れると、UserFormのUnload Meが効かなくなってしまいます。(xl2010) DoEventsを沢山入れようが、Sleepを入れようがダメみたいです。仕方がないので、先頭セルのActivateは諦めました。 UserFormモジュール側で、ActiveCellの位置から先頭セルを計算しても良いのですが、シートモジュールで計算して渡せないかと考えてみました。結局、引数を渡す代わりに領域の先頭セルをPropertyにセットしてからModal表示させてみました。 ☆シートモジュール Private Sub Worksheet_SelectionChange(ByVal target As Range) If target.Column < 2 Or target.Column > 5 Then Exit Sub If target.Offset(0, -1 * (target.Column - 2)).MergeCells = False Then Exit Sub Load UserForm1 '引数を渡す代わりに領域の先頭セルをPropertyにセットしてみた Set UserForm1.targetRange = target.Offset(0, -1 * (target.Column - 2)).MergeArea.Cells(1).Offset(0, 1) UserForm1.Show End Sub ☆Userform1モジュール テキストボックス2個と、コマンドボタンを置いてある Dim myRange As Range Public Property Set targetRange(newRange As Range) Set myRange = newRange End Property Private Sub CommandButton1_Click() myRange.Value = TextBox1.Value myRange.Offset(1, 0).Value = TextBox2.Value Unload Me End Sub Propertyセット漏れのエラー処理が盛り込んでありません。UserForm_ActivateでmyRangeがnothingなら抜けるといった方法が考えられます。まあ、そこまで考えるなら、素直にUserFormモジュールでActivecellから算出する方が良いかも。 ご参考まで。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

質問の主旨は > 特定のセルをクリックしたらフォームを出現させたい で良いという判断での回答です。 通常、エクセルでは「セルをクリックしたら」と言うタイミングは用意されていないので 「アクティヴセルが変わったら」のタイミングを使います。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)     If Not Application.Intersect(Target, Range("B1:B13")) Is Nothing Then         作業内容設定.Show     Else         Exit Sub     End If End Sub これでできますが、キーボードの矢印キーで移動させた場合も反応してしまいます。 回避しようと思ったら、例えば図のB4:B13の範囲に大きさを合わせて 「四角」や「コマンドボタン」を配置するやり方がおそらく楽です。 コレの「クリック時イベント」にユーザーフォームを表示するように書いてやればOKです。 質問の主旨が > その特定セルを基準にして、フォームに入力された内容を各セルに記載していきたい なのだとしたら、それはタイトルと大きくかけ離れる内容ですし、 #1さんもおっしゃるように 「現状はどのように入力されているのか(あるいはその方向性)」について 一切記載がありませんので、アドバイスも難しいです。

kero1192kero
質問者

お礼

回答して頂きありがとうございました。 図を見てもらえば分かると思いますが、下にも別の作業状態を記入する箇所が用意されています。ちなみにその下に同じものがあるかもしれません。不確定です。 で、その下、更にその下の作業状態をアクティブにしても、フォームが出る様に出来ないものでしょうか? 甘えた質問だと思いますが宜しくお願い致します。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

入力規則のプルダウンがせせこましくて嫌という方のためにセルクリックでUserFormを表示させ、ListBoxから選択した値を当該セルに書き込む例です。「フォームに入力された」というのをどの様なコントロールで実現しているか書かれていないので、とりあえずご参考まで。 http://okwave.jp/qa/q7601464.html

関連するQ&A

  • マクロ ユーザーフォームが表示されない

    いつも回答して頂き、ありがとうございます。 Sub UserForm1() UserForm1.Show End Sub と記述しましたが、エラーが発生し、ユーザーフォームが表示してくれません。 コンパイルエラー:Functionまたは変数が必要です フォームはコマンドボタンを一つ配置し、 Private Sub CommandButton1_Click() Unload UserForm1 End Sub と記述してあるだけです。何が悪いのでしょうか?御教授の程宜しくお願い致します。

  • はじめてのユーザーフォーム

    Excel2013 ユーザーフォームの使い方をテストしているのですが、 何処が悪いのか添削して頂けると助かります。 したいこと シートに列の多い表があります(テストでは2列 名前,住所) シート上ボタンでフォームをモーダレスで表示し、 シート上セルを移動すると、該当セル行の内容を ControlSourceでフォーム(カード表示状態)に連動表示し、 こちらでは1件毎に表示して閲覧や修正をしたい。 'Sheet1上のボタン Sub ボタン1_Click() 'フォーム起動 UserForm1.Show vbModeless End Sub 'Sheet1上のスクリプト Private Sub Worksheet_SelectionChange(ByVal Target As Range) If UserForm1.Visible = True Then nr = ActiveWindow.RangeSelection.Row '現在行取得 If nr > 3 Then '3行目より上は見出し行なので無視 名前TextBox.ControlSource = Cells(nr, 1) 'エラーになります 住所TextBox.ControlSource = Cells(nr, 2) End If End If End Sub 修正ボタン押下でセルをフォーム変数へ代入するのはできたので、ControlSourceで セルと連動できれば横着できるなと… よろしくお願いします。

  • エクセル フォームを閉じてセルに戻る

    何時もご指南頂きとっても感謝いたしております さて 先般こちらで ご指南頂き Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Cells.Count = 1 Then Select Case Target.Column Case 1 ' A列の場合 UserForm1.ListBox1.ControlSource = Target.Address UserForm1.Show Case 2 ' B列の場合 UserForm2.ListBox1.ControlSource = Target.Address UserForm2.Show End Select End If End Sub というコードを作りましたがそれぞれのフォームをリストボックスを選択した後 自動で其のフォーム閉じてシートに戻るとき最初にWクリックしたセルの右隣のセルに戻るようにしたいのですが いろいろ私なりに試してみましたがダメでした どうかご指南ください よろしくお願いいたします。

  • VBAのユーザーフォームを実行しようとすると…。

    オブジェクトがありません、とのエラーメッセージが出て、実行できません。 標準モジュールには以下のようなプロシージャを記述しているのですが、デバッグしてみると、2行目の「○○○.Show」の部分が黄色く反転しているのです。 しかし、○○○の名前をつけたユーザーフォームは存在するのです。オブジェクトがない、とのエラーメッセージが出る理由がわかりません。 どなたか解決方法を教えていただけませんでしょうか。 Public Sub Form_Show() ○○○.Show End Sub

  • テキストボックスクリックでフォームたちあげ

    VB6.0でプログラム作成中です。 あるhinというオブジェクト名のテキストボックスをデータを入力しようとすると、Form2を立ち上がるようにしたいのです。以下のコードでいけると思ったのですが、フォームがあがらない状態です。 指摘頂ける方、宜しくお願い致します。 内容:フォーム2 キーボードの役割 テキストボックスに触れると、キーボードが立ち上がる。 Private Sub hin_Change(Index As Integer) Form2.Show End Sub

  • ExcelのVBAでフォームが表示されない

    Sub フォーム起動() UserForm1.Show End Sub 上記の内容をModule1にしてショートカットキーをを設定し、いつでも他に作ってあるユーザーフォームが起動するようにしていました。しかし先日、久しぶりに使ってみようと、設定したショートカットキーを押したら、VBAもマクロも全くいじっていないにも関わらず、「UserForm1.Show」の部分で「実行時エラー'380': Valueプロパティを設定できません。プロパティの値が無効です。」とエラーが表示されフォームが起動できません。これはいったい何が原因なのでしょうか。

  • クリックするたびに、フォームが複数表示される

    下記のコードだと Private Sub Button1_Click(・・・ Dim f2 As New Form2() f2.Show() End Sub ボタンをクリックするたびに、同じフォームが表示されます。 同じフォームが開かないようにしたいのですが、どうすればいいのでしょうか? バージョンは、Visual Basic .NETです。 よろしくお願いします。

  • なぜかフォームは上書きされません。

    こんにちは。 下記のようなフォームにボタンを追加し、セルにデータを書き込み、最後に上書きするマクロを作ってみました。 セルのデータは上書きされますが、なぜかフォームは上書きされません。フォームの表示で追加したボタンも表示されます。 どなたかご教示願います。 -------------------------------------------- Sub testVBA() Dim WOBJ As Object With UserForm1 Set WOBJ = .Controls.Add("Forms.CommandButton.1", "MyCom", True) End With Range("A1").Value = "aaaaaaaaaaa" ThisWorkbook.Save UserForm1.Show End Sub

  • userform1の終了に同期を取りたい。

    ユーザーフォームを勉強し始めました。 標準モジュールに、 sub oya() userform1.show end sub として、userform1を表示しています。 そしてuserform1で、諸々の設定をしています。 oyaでは、この設定を使って作業をします。 ここで質問です。 oyaの作業は、userform1で設定した内容を使うため、 処理が終わるのを待つ必要がありますが、 その書き方が分かりません。 今現在は、単純にuserform1.showの下に処理を書いているので、 設定する前に空欄を使うような状況になってしまっています。 sub oya() userform1.show  処理ロジック end sub 分かりにくいでしょうが、 宜しくご指導下さい。

  • エクセル2010のユーザーフォーム記述について。

    エクセル2010でセルのコピーペーストの質問です。次のような記述がユーザーフォームにあります。これだと、なぜか貼り付け先のセルのすぐ上のセルの条件付き書式まで貼り付け先に貼り付けられてしまいます。 どのような記述をすれば不具合を解消できますか。 Private Sub CommandButton1_Click() Selection.PasteSpecial Paste:=xlPasteAllExceptBorders Selection.PasteSpecial Paste:=xlPasteValues UserForm1.Hide End Sub Private Sub CommandButton2_Click() UserForm1.Hide End Sub

専門家に質問してみよう