![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
よろしくお願いします。
今、ユーザーフォームを使って製造計画表を作っています。
コンボボックスで会社名、リストボックスで会社ごとの製品名を選択させるとこまで出来ました。
1日に3つの製品を作ることが出来るので、同じ中身のコンボボックス、リストボックスを使って3つ作りたいと思っています。
ユーザーフォームの形的にはこのような感じですが。
1. コンボボックス リストボックス
2. コンボボックス リストボックス
3. コンボボックス リストボックス
今は、1.のとこだけは出来たのですが、2.3.は1.と同じコードをコピーして必要と思われるとこだけをコンボボックス2と変えたりしてみたのですが、上手くいきませんでした。こんなコードですが。
Private Sub UserForm_initialize()
'ComboBox1セット
Dim ico As Long
ico = 1
With ThisWorkbook.Worksheets("Sheet1")
Do While .Cells(1, ico) <> ""
Me.ComboBox1.AddItem .Cells(1, ico).Value
ico = ico + 1
Loop
End With
Me.ComboBox1.SetFocus
End Sub
Private Sub ComboBox1_Change()
'ListBox1セット
Dim ico As Long
'Me.ListBox1.Clear
ico = Me.ComboBox1.ListIndex + 1
With ThisWorkbook.Worksheets("Sheet1")
Me.ListBox1.List = .Range(.Cells(2, ico), _
.Cells(.Cells(Rows.Count, ico).End(xlUp).Row, ico)).Value
End With
End Sub
VBAも初めたばかりで質問の内容もわかりづらいとも思いますが、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
回答が付いてないようなので。
。UserForm Initializeイベントで3つのComboBoxにLIstをセット
ListBox1のChangeイベントが出来たら、それをコピーして、数値のところを、2,3に変えるだけです。
質問者のコードをそのまま使用するとして。。
'----- 3つのコンボにリストをセット--------
Private Sub UserForm_initialize()
Dim ico As Long
ico = 1
With ThisWorkbook.Worksheets("Sheet1")
Do While .Cells(1, ico) <> ""
Me.ComboBox1.AddItem .Cells(1, ico).Value
ico = ico + 1
Loop
End With
Me.ComboBox2.List = Me.ComboBox1.List
Me.ComboBox3.List = Me.ComboBox1.List
Me.ComboBox1.SetFocus
End Sub
'----------ListBox1をセット----------------
Private Sub ComboBox1_Change()
Dim ico As Long
ico = Me.ComboBox1.ListIndex + 1
With ThisWorkbook.Worksheets("Sheet1")
Me.ListBox1.List = .Range(.Cells(2, ico), _
.Cells(.Cells(Rows.Count, ico).End(xlUp).Row, ico)).Value
End With
End Sub
'----------ListBox2をセット----------------
Private Sub ComboBox2_Change()
Dim ico As Long
ico = Me.ComboBox2.ListIndex + 1
With ThisWorkbook.Worksheets("Sheet1")
Me.ListBox2.List = .Range(.Cells(2, ico), _
.Cells(.Cells(Rows.Count, ico).End(xlUp).Row, ico)).Value
End With
End Sub
'----------ListBox3をセット----------------
Private Sub ComboBox3_Change()
Dim ico As Long
ico = Me.ComboBox3.ListIndex + 1
With ThisWorkbook.Worksheets("Sheet1")
Me.ListBox3.List = .Range(.Cells(2, ico), _
.Cells(.Cells(Rows.Count, ico).End(xlUp).Row, ico)).Value
End With
End Sub
'--------------------------------------------
ただこれではCombo,ListBoxが増えたときにコピーや修正が大変ですので、LIstBoxへのセットは殆ど同じですから、そこをサブルーチンにしてやります。
方法はサブルーチンをコールするときにComboBoxの番号を引数としてコールしてやります。
'-------------------------------
Private Sub ComboBox1_Change()
Call ListBoxSet(1)
End Sub
'-------------------------------
Private Sub ComboBox2_Change()
Call ListBoxSet(2)
End Sub
'-------------------------------
Private Sub ComboBox3_Change()
Call ListBoxSet(3)
End Sub
'------共通ListBoxセット----------------
Private Sub ListBoxSet(No As Integer)
Dim ico As Long
ico = Me.Controls("ComboBox" & No).ListIndex + 1
With ThisWorkbook.Worksheets("Sheet1")
Me.Controls("ListBox" & No).List = .Range(.Cells(2, ico), _
.Cells(.Cells(Rows.Count, ico).End(xlUp).Row, ico)).Value
End With
End Sub
'--------------------------------------
以上。
onlyromさん、ありがとうございました。自分の想像してた通りの物が作ることができました(^_^)
とても助かりました。
お礼の返事がだいぶ遅れてしまってすいませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
例外処理のフローチャートの記...
-
同じコンボボックス、リストボ...
-
”:”がいっぱいの文について。
-
モジュールとサブルーチン
-
Excel VBAで、ユーザーフォー...
-
ファイルを出力させる方法
-
use baseしたpackageのローカル...
-
COBOLで、Shellを起動するには?
-
タイマーで動かすselect caseの...
-
アセンブリプログラムのcallし...
-
Perlのサブルーチンの引数引継ぎ?
-
ACCESSのVBAでPrivate Sub ~en...
-
Attempt to free unreferenced ...
-
配列Xの最大値、最小値を求める...
-
フォートランのサブルーチンの...
-
Excel VBAでリンク切れをチェッ...
-
VBAで別モジュールへの変数の受...
-
ユーザー定義関数に#NAME?が返...
-
VBでグローバル変数を宣言するには
-
Excelで時刻になったら知らせて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
COBOLで、Shellを起動するには?
-
モジュールとサブルーチン
-
”:”がいっぱいの文について。
-
ExcelVBA AddinでOnAction
-
オフコン(富士通Kシリーズ)...
-
ACCESSのVBAでPrivate Sub ~en...
-
VBAで2重のDoLoop関数から抜け...
-
fortran95実行エラー
-
perlの構文でカンマの意味が分...
-
プログラムの可読性が悪いです...
-
Perlのサブルーチンの引数引継ぎ?
-
サブルーチンを認識しません。
-
GOSUB命令とは
-
Inline CでOpenMPは使えますか?
-
初歩的な質問なのですが、サブ...
-
サブルーチンに引数を2つ以上...
-
BASIC言語で時差を求めるには?
-
cobol サブルーチンのlink
おすすめ情報