• ベストアンサー

excelでVBAでユーザーフォームのリストBOX

下記VBAの作成の仕方を教えていただけないでしょうか。 やりたいこと (1)sheet2のA1セル~A5セルまでの間の間をユーザーフォームのリストボックスに登録する (2)sheet1のA1セルをクリックすると、ユーザーフォームが起動し、任意のリストをクリックすると、 その値がA1セルに格納され。ユーザーフォームが終了する。 ※コマンドボタンは使わずにお願いします。なおexcel2000です。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

既出回答に少し間違いがあるので追加で回答しておきます。 >(1) リストボックスに記載するリストが「動的」な場合(つまりユーザーフォームが起動する都度に変化する可能性がある)ならInitializeイベントなどで設定するのが適切ですが,単純に >sheet2のA1セル~A5セルまでの間の間をユーザーフォームのリストボックスに登録する だけであれば, 1.VBE画面でユーザーフォームにリストボックスを配置する 2.プロパティウィンドウを出して 3.RowSource欄にSheet2!A1:A5と記入しておく で十分です。 >任意のクリックでA1に は特に補足はありませんので,参考として「A列の任意のセルをWクリックするとユーザーフォームが開き,リストボックスから選ぶとWクリックしたセルにデータが入る」ようにしてみます。 1.シート1のシート名タブを右クリックしてコードの表示を選ぶ 2.現れたシートに下記をコピー貼り付ける public Dest as range private sub worksheet_beforeDoubleClick(byval Target as excel.range, cancel as boolean) if target.column = 1 then cancel = true set dest = target userform1.show end if end sub 3.リストボックスをWクリックして開いた画面に下記をコピー貼り付ける private sub ListBox1_Click() on error resume next Sheet1.dest.value = me.listbox1.value me.hide end sub

puyopa
質問者

お礼

回答ありがとうございました。 とても有意義なアドバイスで勉強になりました。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! すでにNo.1のspar さんが適切な回答をされていますので、余計なお世話になるかもしれませんが・・・ Sheet1のA1セルをダブルクリックした場合にご希望の操作になる方法です。 (1)に関してはspar さんの方法をそのまま使用させていただいて・・・ ユーザーフォームのリストボックス上でダブルクリック → ↓のコードをコピー&ペースト Private Sub ListBox1_Click() Worksheets("sheet1").Range("A1") = ListBox1.Value Unload UserForm1 End Sub 画面左下にあるSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてA1セルをダブルクリックしてみてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target = Range("A1") Then UserForm1.Show End If If Range("A1") <> "" Then Cancel = True End If End Sub こんな感じではどうでしょうか?m(_ _)m

puyopa
質問者

お礼

回答ありがとうございます。 1の方と同じく、とても分かりやすいコードで、ありがたいです。勉強になります。 また、1の方のお礼欄にも記載させていただいたのですが、ワークシートの名前を指定する方法を教えていただけると幸いです。

  • spar
  • ベストアンサー率46% (35/75)
回答No.1

必要なもの UserForm1とUserForm1上にListBox1 'ユーザーフォームのリストボックスのコード Private Sub ListBox1_Click() Sheet1.Cells(1, 1) = UserForm1.ListBox1.Text Unload UserForm1 End Sub 'ユーザーフォームのコード Private Sub UserForm_Initialize() With ListBox1 .RowSource = "Sheet2!A1:A5" End With End Sub 'シート1のコード Dim R As Integer, C As Integer Private Sub Worksheet_SelectionChange(ByVal Target As Range) R = ActiveCell.Row C = ActiveCell.Column If R = 1 And C = 1 Then UserForm1.Show End If End Sub これは1つの例ですので、これを基に色々と勉強してみて頂ければうれしいです!

puyopa
質問者

お礼

早速の回答ありがとうございます。 少しアレンジして、Sheet2 を具体的なシート名("datalist")を指定するコードに変えようとしたのですが、どうしてもうまくいきません。 便乗質問で、誠に申し訳なく恐縮なのですが、シート名を指定する方法も教えていただけないでしょうか