• ベストアンサー

Excel VBA ユーザーフォームのコンボボックスに表示する値の入力方法

Excel Xを使用して、VBAのユーザフォームにコンボボックスを作りましたが、どうしてもコンボボックス内に表示する値の入力方法が分かりません。 WEBや本などで「これ」と思われるものを実験していますが、どれも表示することができません。 できるだけ詳しく教えていただけませんか? したいことは、  cbocenter というコンボボックスに値を出します。  値は List シートの A2 から A18 に入力済みです。  それと値から選択した値を data シートの J列 に  表示させたいのです。(行の指定はできています) 本当に困ってます。よろしくお願いします。

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

  • ベストアンサー
noname#27115
noname#27115
回答No.7

#2です。 全容が見えないので何とも言えないのですが、現在アクティブのCellがJ上にある場合、次のコードで放り込めます。 VBAがそこそこわかっておられるようなので、このヒントで組みこんでもらえるのでないでしょうか? Excelの場合、コンボボックスに1列しか表示できないので、とりあえず、その値を放り込んで残りの値(shinsei hizuke bangou)はlookup関係の関数を用いれば、引っ張ってこられると思います。Accessのコンボだと、コンボに列方向にも値を持たせられるんですが、、、Excel For Macにこれが採用されているなら、これを利用した方が簡単かと思います。 Private Sub ComboCenter_Change() 'Private Sub ComboCenter_Click() ← Click イベントでもいいかも Dim Num As Integer Num = ComboCenter.ListIndex If ActiveCell.Column = 10 Then ActiveCell = Worksheets("List").Cells(Num + 2, 1) End If End Sub

39call
質問者

お礼

本当にたびたびありがとうございました。 教えていただいた上記の記述は結局どうしていいか分からなかったのですが、「次へ」で他のテキストボックスをクリアにする記述をしたら、なんと次々にデータを入力してもちゃんと次の新しい行に転記されるようになりました。(なんでだろ、不思議...) というわけで、最後の難問だったコンボボックスが解決できて、完成でしました。本当に長々おつきあいいただき、ありがとうございます!!

その他の回答 (6)

noname#27115
noname#27115
回答No.6

#2です。 > UserFormのGeneralの中で上記の構文を入力して こういう質問をされると言うことは、WinとMacで仕様が違うのかな? とりあえず、下のコードをまんま貼ってもらうと ---------------------------------------------------------------------- Private Sub UserForm_Initialize() Dim i As Long For i = 2 To 18 ComboCenter.AddItem Sheets("List").Cells(i, 1) Next i End Sub ---------------------------------------------------------------------- ってな感じで 仕切られて表示されないですか?こうなっていればそれで動くと思います。 一度、デバッグのステップインでどんな値が Sheets("List").Cells(i, 1) に入っているか見てもらえませんか? それとうっかりしていましたが、、UserFormを使うとUserForm起動時にフォーカスがワークシートの方へ移れないので、2つ目からのデータ入力位置のCellが指定できませんね。規則性があるのならコードで制御できますが、任意の場所へとなるとその都度、UserFormを閉じないといけません。 このあたり、どうされますでしょうか? それを考えると コントロールツールボックスのコンボボックス の方が現実的な感じがします。

39call
質問者

補足

いえいえ、単に私が分かっていないだけなんです、すいません! ユーザーフォームに「次へ(tsugi)」というコマンドボタンを作ってありまして、コード欄には、tsugi-Click でテキストボックスやオプションボタンの内容をdataシートに転記するようにしてあります。以下のような感じです。 ここに教えていただいたコードを貼ったところ、無事コンボボックス内に項目が表示されました!! で...、コンボボックスで選択した内容を data シートの J列に表示させるにはどうしたら良いのでしょう? 本当にお手間を撮らせてしまってすいません。 ----------------------------------------------------- Private Sub tsugi_Click() Worksheets("date").Select Range("A65536").End(xlUp).Offset(1, 0).Select With ActiveCell .Offset(0, 0) = txtshinsei.Text .Offset(0, 1) = txthizuke.Text .Offset(0, 4) = txtbangou.Text If touroku.Value = True Then .Offset(0, 2) = "登録" ElseIf sakujyo.Value = True Then .Offset(0, 2) = "削除" ElseIf henkou.Value = True Then .Offset(0, 2) = "変更" End If

noname#27115
noname#27115
回答No.5

#2です。 ' もし、値がプロパティーで設定できなかったら、 ' 次のコードで設定してください。 ' イベントは別のイベントでも可能です。 Private Sub UserForm_Initialize() Dim i As Long For i = 2 To 18 ComboCenter.AddItem Sheets("List").Cells(i, 1) Next i End Sub

39call
質問者

補足

ありがとうございます、UserFormのGeneralの中で上記の構文を入力して、実際に選択した値を表示するシート(data)のworksheet-SelectionChangeに、Public pRow As Long...以下の構文を書けば良いのでしょうか。 試してみたのですが、やはりコンボボックスに値が表示されないのです。 他に方法はありませんか? よろしくお願いします。

noname#27115
noname#27115
回答No.4

#2です。 > できるだけ詳しく教えていただけませんか? ということでしたので。。。 Listの値は単にプロパティーで設定すれば、どちらの場合でもOKです。 で、、どの行かの指定は #2にあるように Worksheet_SelectionChange が発生した時に その Row(行)の値をPublic 変数(myRow)に代入してあげるのです。そうしてやれば、どこからでも利用できます。 で、、後、コンボボックスで値を取得した後、Cells(myRow + 修正値,10) の位置に目的の値を表示してやればいいのです。 今回の場合は。。。 表示先 = Worksheets("list").Cells(myRow, 10) 取得先 = Worksheets("list").Cells(Num + 2, 1) となります。 Numはコンボボックスの選択された値のIndex値です。 後はコントロールボックスのコンボボックスなら#2のコード通り、#1さんの言うフォームのコンボボックスであれば、そのコンボボックスのChageかGotFocusのイベントに先のコードを書けばいいと思います。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

良くお判かりのようですが、下記では、どこが質問を満たさないか、あれば補足してください。 dataシートにおいて、メニューバーの余白部でクリック。コントロールツールボックスをクリックし コンボボックスのアイコンをクリックし コンボボックスを貼りつけます。 その中で右クリックして出てくるウインドウで、プロパ ティをクリック。 ListFillRangeの項目行を探し右欄に LIST!A2:A18といれてウインドウを閉じます。 そのコンボボックスの中でダブルクリックし Private Sub ComboBox1_Change() End Sub が出てきます。 その中間に ActiveCell = ComboBox1.List(ComboBox1.ListIndex) を入れて、デザインモードを脱します。 dataシートにおいて、コンボの▼をクリックしてその中の1つをクリックすると、アクチブセルに、選んだアイテムがセットで来ます。

noname#27115
noname#27115
回答No.2

' 反対にコントロールツールボックスのコンボボックス の方だとしたら ' コンボボックスの編集が可能な状態にします。 ' コンボボックス右クリック ' ListFillRange に 表示したい値のあるシート名とCell範囲を指定します。 ' 例:List!A2:A18 ' そして、VBAエディターを開いて対象シートに次のコードをコピペしてください。 Public myRow As Long '''Public myCol As Long Private Sub combocenter_Change() Dim Num As Integer Num = combocenter.ListIndex Worksheets("list").Cells(myRow, 10) = _ Worksheets("list").Cells(Num + 2, 1) End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) myRow = Target.Row '''myCol = Target.Column End Sub

39call
質問者

補足

ありがとうございます、使用しているのはユーザーフォームのツールボックスにあるコンボボックスです。 やはりプロパティには「ListFillRange」欄はないので、コードで書くしかないようなのです。 よろしくお願いします。

回答No.1

コントロールツールボックスのコンボボックスではなく、フォームのコンボボックスですね? それなら作成したコンボボックスを右クリック。 コントロールの書式設定 「コントロール」タブ 「入力範囲」 にListのシートのA2からA18を指定。 (このセル範囲の値が、ドロップダウン ボックスに表示されます。) 「リンクするセル」に一覧で選択された項目を示す値が返されるセルを指定します。 仮に3番目を指定すると3がかえります。 数式でこの数値を使って、一覧で選択された項目に基づいた結果を返すことができます。 なお「ドロップダウン リストの行数」でドロップダウン リストに表示される行数を表します。 お役に立ちましたか?

39call
質問者

補足

ありがとうございます、プロパティ内のRowSourseのことですね。残念ながらMac版にはおっしゃる欄がないので悩んでいたのです。

関連するQ&A

  • EXCEL VBA ユーザーフォームコンボボックスのRowSourceの設定方法について

    EXCEL VBAのユーザーフォーム内のコンボボックスのRowSourceの設定方法について質問があります。 基本的な質問かもしれませんが、うまく検索できませんでした。 「リスト一覧」シートに     A1  B1   C1 1行 りんご ばなな ぶどう 2行 100円  200円 300円 3行 110円  210円 310円 という値を入れる。 ユーザーフォーム内にコンボボックスを2つ設置し、 コンボボックス1の値が「リスト一覧」シートの1行の値と同じときに コンボボックス2のRowSourceを同じ列の2行、3行に設定する。 Private Sub ComboBox1_Change() Dim i As Integer  i = 1   Do Until Sheets("リスト一覧").Cells(1, i) = ComboBox1.Value    i = i + 1   Loop ComboBox2.RowSource = i列の2行目及び3行目.Address End Sub というコードになると思うのですが、うまくいきません。 どうぞよろしくお願いいたします。

  • Excel VBA フォーム上のコンボボックス

    Excel VBA フォーム上のコンボボックスの値リストが例えば5行あります。 3行目の行(値)の背景色を変更したいのですが出来ますでしょうか? よろしくお願いします。

  • コンボボックスのリスト内容表示の仕方

    エクセル マクロ VBA の質問です。ユーザーフォーム(UserForm1)にあるコンボボックス(ComboBox1)にリストを表示したいのですが。 全部という項目と(これはできてます) エクセルのシートA4からA列の空白行までの値を項目として表示したいのですが、いまいちうまくいきません。 教えていただけると助かります。

  • EXCEL VBAのコンボボックスに取り込むリストについて

    すいません、EXCEL VBAのコンボボックスにデータを取り込む方法について教えていただきたいことがあります。 (1)「シート1」のA列にデータが入力されている (2)ユーザーフォームにコンボボックスを設置し、このA列のデータを取り込む。 このときにA列に入っているデータの数だけ取り組むにはどうしたらいいのでしょうか。 シート1    A列 1行 11 2行 21 3行 31  ・   ・  ・   ・ Private Sub UserForm_Initialize() ComboBox1.RowSource = Sheets("シート1").Range("?") End Sub ?の部分がわかりません。End(xlup)のようなものを使ってデータが入っている最後の行を調べるのかと思いましたが、どうもうまくいきませんでした。 よろしくお願いします。

  • Excel ユーザーフォームでコンボボックスを使用してデータ入力

    Excelのユーザーフォームでコンボボックスを使用して、シートのデータを表示しています。 コンボボックス:ComboBox1 テキストボックス1-3:TextBox1-3 コンボボックスのRowSource:シート名!A2:C100 コンボボックスの変更時の動作: Me!TextBox1.Value = ComboBox1.Value とここまではできたんですが、テキストボックス2にシートのB列の値を、テキストボックス3にシートのC列の値を入れたいのですが、 どのようにしたらいいのでしょうか?

  • Excel VBA コンボボックスの使い方

     VBAでのコンボボックスの使い方をしらべているのですが、うまく見つかりません。コンボボックスのリストに登録するのはどうしたらよいのでしょうか?シート上のセル内のデータを使用しないとリストの登録は出来ないのでしょうか?VBA上で作成して、ユーザーフォームで選択できるようにしたいと思っています。VBAをはじめたばかりなので初歩的な質問で大変恐縮です。どなたかわかる方がいらっしゃったらお願い致します。

  • VBA コンボボックス リスト表示について

    初心者ですいません エクセル VBAのフォームでコンボボックス3つと、テキストボックス3つがあります シートのListにA~F列までのデータがあり、コンボボックス1にA列のリストを表示し コンボボックス2にA列で選んだリストを参照したB列のリストを表示し、コンボボックス3 にコンボボックス1,2で選んだリストを参照し、C列のリストを表示した後、 コンボボックス1,2,3で選ばれたもののD列、E列分をテキストボックス1,2に 反映しようと思っておりますがうまくいきません どのようにしたらよいか、おしえてください 宜しくお願いします ちなみに、リストの内容は A列   B列   C列     D列   E列 テレビ 42インチ  HDD内蔵  台    100,000 テレビ 32インチ  BD内蔵   台     80,000 テレビ 19インチ          台     50,000 ビデオ HDD   1TB     台    100,000   ビデオ HDD   500GB    台     80,000 ビデオ BD            台     70,000 が、入ってます 希望は、質問の際のカテゴリ選択のようになればよいのですが... さらに、希望を言えば、自動で、行ごとに1,2,3...と番号を振るようにしており スピンボタンで番号を選べば、登録された上記のデータをフォームに反映させるようにしております これもうまくいきません お願いばかりで申し訳ありませんが 宜しくお願いします

  • エクセルVBA コンボボックスの値の転記

    エクセルVBAの質問です。 ユーザーフォームを表示し 年を選択するコンボボックス1 月を選択するコンボボックス2 を入力してもらい ユーザーフォームを閉じるときに sheet1のワークシートのC2セルに 「コンボボックス1の値」+「年」+と「コンボボックス2の値」+「月」をつなげて 入力できるというようなマクロを考えています。 下記の様に考えてみたのですが、 うまく入力できませんでした。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "2021" .AddItem "2022" .AddItem "2023" .AddItem "2024" End With With ComboBox2 .AddItem "1" .AddItem "2" .AddItem "3" .AddItem "4" .AddItem "5" .AddItem "6" .AddItem "7" .AddItem "8" .AddItem "9" .AddItem "10" .AddItem "11" .AddItem "12" End With Private Sub CommandButton1_Click() 'ユーザーフォームを閉じる Unload UserForm1 'ユーザーフォームの値をセルC2に入力 With Worksheets("sheet1") .Cells(2, 3).Value = "ComboBox1.Text" & "月" & "ComboBox2.Text" & "日" End With End Sub どのように修正すればいいでしょうか? よろしくお願いします。

  • エクセルVBA「コンボボックスの値をワークシートに代入」

    エクセルVBA「コンボボックスの値をワークシートに代入」 連日質問してしまい申し訳ありません。・・・ 今回は「コンボボックス」にリストアップされている値をセルに入力したいのです。 画像を見て頂ければと思いますが、コンボボックス(左ウィンドウ画像)には25の文字列がリストアップされています。 このリストアップされている文字列をすべてワークシートのセルB4からの"4"列に入力したいのです。 なんだか滅茶苦茶ですが、ご理解頂ければご協力お願いします。

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

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

専門家に質問してみよう