• ベストアンサー

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

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

  • puyopa
  • お礼率87% (459/525)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答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")を指定するコードに変えようとしたのですが、どうしてもうまくいきません。 便乗質問で、誠に申し訳なく恐縮なのですが、シート名を指定する方法も教えていただけないでしょうか

関連するQ&A

  • ユーザフォームのリストボックス

    お世話になります。 ユーザフォームのリストボックス内の下記2個のどちらかを選択し Private Sub UserForm_Initialize() ListBox1.AddItem ("印刷プレビュー") ListBox1.AddItem ("印刷") End Sub CommandButton1をクリックして Worksheets("Sheet1").PrintOut か Worksheets("Sheet1").PrintPreview を実行したいのですが どうやってリストボックスとコマンドボタンを 連動できるようにすればいいのでしょうか コマンドボタンのみだったら出来るのですが、 リストボックスを使うとうまくいきません。 ご教授よろしくお願いいたします。

  • EXCEL ユーザーフォームを使ったマクロ

    データの登録をするのにユーザーフォームを使おうと思うのですが、なかなかうまくいきません。教えてください。 ユーザーフォームにはコンボボックス、テキストボックス、コマンドボタンが貼り付けてあります。(コンボボックスのリストには呼び出したいシートの名前が入っています) コンボボックスのリストの中から呼び出したいシートを選択し、テキストボックスに入力した内容を、コマンドボタンを押すことで選択されたシート上の、あるセルに登録したいのですがどうすればよいでしょうか?

  • VBA ”あかさたなはまやらわ”で選択、リスト表示

    よろしくお願いします。 ユーザーフォームのコマンドボタン1をクリックしたときは、 Sheet1のA2~A行の最終セルの中から先頭文字が、 あいうえお(カタカナも含む)を選択してリストボックス1に リストとして表示する。 同じように ユーザーフォームのコマンドボタン2をクリックしたときは、 Sheet1のA2~A行の最終セルの中から先頭文字が、 かきくけこ(カタカナも含む)を選択してリストボックス1に リストとして表示する。 以後同じようにして”わ”まで繰り返す。 【A行の最終行は可変します】

  • エクセルVBAでコンボボックス

    エクセルVBAのコンボボックスの使い方について質問します。 実現したいプログラムは 「チェックボックスから選んだ数字で計算するプログラム」 です。 具体的には… まず、コンボボックスをシート上に配置します。そのコンボボックスには 数字の1から10を選べるようにしておきます。 次に、コマンドボタンを配置します。これは単にプログラムをスタート させる目的です。 ユーザーは、まずコンボボックスから好きな数字を選択します。 そしてスタートボタン(コマンドボタン)を押します。 すると、選んだ数字の2倍がセルに表示されます。 さらに発展系としては… チェックボックスを4つ配置します。各チェックボックス には、+、-、×、÷を割り振っておきます。 また、コンボボックスを2つ用意し、それぞれ1~10の数字をリストにします。 ユーザーは、チェックボックスから好きな記号を選び、さらにコンボボックスから 好きな数字を選びます。そしてスタートボタンを押すと、選んだ数字を選んだ記号 で計算した値がセルに表示されます。 というようなプログラムを考えているのですが、うまくできません。 ポイントは、 ・チェックボックスにリストを入力する方法 ・チェックボックスの選択状態や、リストボックスから選ばれた数字を、  変数として取得する方法 インターネットで調べているのですが、リストボックスに値を入れるのにもマクロを走らせ なければならない方法とか、ユーザーフォームでの説明ばかりでなかなか実現に至りません。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform05.html プログラムのイメージ図としては添付の図の通りです。 どのようにプログラムを書けばいいのでしょうか。

  • VBAのユーザーフォームの使い方

    皆様、こんにちは。 VBAのユーザーフォームを習い始めた初心者です。本の説明を読んでもユーザーフォームの使い方がよく分かりません。例えば、あるセールをクリックしたら、フォームが表示される、そしてフォームの中にあるコンボボックスのリストの中から選ばれた値が最初に選択したセールに入力されるという使い方がありえますか?申し可能でしたら、コード作成の例をいただけないでしょうか? どうぞよろしくお願いいたします。

  • ユーザーフォームでのコンボボックスについて。

    同じような内容の質問を探したのですが、解決の糸口がつかめず質問させていただきます。 VBAは初挑戦なんですが、本とネットではなかなか理解しづらいところがあって・・・。 自分の作っているフォームとは多少違いますが、説明を簡単にするために例を挙げさせていただきます。 まずSHEET1において、ユーザーフォームに3つのコンボボックスを配置しています。それぞれ、「月」「日」「曜」とします。 これを、SHEET2においてあるリスト「1~12」と「1~31」「月~金」にそれぞれ反映させたいのですが。 それを一つめのデータとして、「月」をA1、「日」をB1、「曜」をA2にそれぞれ配置して、二つめのデータはA3から始めたいのですが。 あともうひとつ。 SHEET3に表紙をおいて、コマンドボタンを配置し、そのボタンをクリックすると、SHEET1が開くと同時に、上記のユーザーフォームが出るってコトはできるのでしょうか? ややこしくてすみません。 よろしくお願いします。

  • Excel VBA ある値が入力されたときだけユーザーフォームを出したいです

    ExcelのVBAを教えてください。 D15は、リストで入力する値を選択できるようになっています。 D15で選択された値によって、B15に反映されるようになっています。 たとえば、 D15の値をリストで105を選んだら、B15に「AAA」と入り、 D15の値をリストで109を選んだら、B15に「ccc」と入ります。 これらは、B15にIF関数が入っていて制御されています。 ところが、D15の値をリストで108と選んだ時だけ、B15に「BBB」と入る場合と「DDD」と入る場合の2パターンあり、これは人間の判断でどちらにするか考えるので、IF関数を使えません。 なので、 D15のリストボックスで108を選んだときだけ、 ユーザーフォームを出し(UserForm1.Show)、ユーザーフォームにBBBとDDDのコマンドボタンがあって、Tabでコマンドを選択し、Enterで確定し(マウスは使いたくない)、確定したコマンドの値をB15に反映させるようにしようと思いました。 ・・・が、ユーザーフォームを出すタイミングのVBAの組み方がわかりません。 D15の値をリストから選択する・・・というのは、他の方が作った仕組みなので変えることはできません。

  • エクセルVBAのリストボックス

    エクセルVBAのリストボックスを使った検索システムを作っています。 リストボックスはユーザーフォームではなくsheetに貼り付けてます。 リスト地域 北海道 青 森 岩 手 山 形 新 潟  ・  ・  ・ リストボックスから地域(複数選択)を選んで検索ボタン(コマンドボタン)を押すと同じsheetの特定の場所(例えばrange("A25")に選択した地域を表示させたいのですがうまくいきません。 例) 北海道、東京、愛知 のように表示させたいです。 単数選択ではうまく表示できるのですが、複数だとうまくいきません。 (複数選択できるようにプロパティのMultiSelectの項目はfmMultiselectMultiに変更しています。) よろしくお願いします。

  • フォームのリストボックスに値を表示させたい

    VBA フォームのリストボックスに値を表示させたい A1→aaa A2→bbb リストボックスに上記の値を表示させたいなら、 Private Sub UserForm_Initialize() UserForm1.ListBox1.RowSource = "Sheet1!A1:A2" End Sub で出来ますが、シート上のセルで表示する値を指定するのではなく、VBA上で、リストボックスに表示させる値を指定したいのです。 Private Sub UserForm_Initialize() UserForm1.ListBox1.RowSource = "aaa,bbb" End Sub を実行すると、VBA実行時エラー380になってしまいます。 UserForm1.ListBox1.RowSource = "aaa;bbb" もダメでした。 ご回答よろしくお願いします。

  • テキストボックスの値をExcelシートに反映

    ユーザーフォームのテキストボックス2個の値がExcelシート1の値にマッチしたらそのシート1の値が任意の値に変換される。VBA初心者ですご教授のほどよろしくお願いします。

専門家に質問してみよう