
VBA初心者です。現在仕事でエクセルを利用してツールを作成しておりますが、作業に詰まってしまったため、詳しい方教えていただけないかと思い質問させていただきます。
Userform1に、テキストボックス【txt】とコマンドボタン【btn】があり、Userform2にコンボボックス【cmb】があったとします。そして、Userform1の【btn】をクリックするとUserform2が開く作りだとします。
【cmb】のRowSourceには、あらかじめ名前の定義で指定したセル範囲が設定されており、リストは
一列目 二列目
a1 あああ
b1 かかか
b2 ききき
c2 ししし
d4 ててて
・ ・
・ ・
・ ・
で、ColumnCount = 2 、ColumnWidths = 0pt ; 10pt
という設定です。
そこで質問ですが、Userform1の【btn】をクリックした時に【txt】に入力されている値に応じて、Userform2の【cmb】の初期値を決定するにはどのようにすればよいでしょうか?なお、【txt】に入力する値は【cmb】のリストの一列目のいずれかである必要があるとします。
私で考えられる対応方法としては、下記のような記述ならうまくいくのかな??とは思うのですが、実際の【cmb】のRowSourceはそれなりに大きいリストであるため、もう少しスマートにやる方法があれば是非教えていただきたいと思っています。どうぞよろしくお願いします。
---------------------------------------------------------------------------------------------------------
Public b As Integer '標準モジュール
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Private Sub btn_Click() 'Userform1
Dim a As Strin
a = txt.Text
Select Case a
Case a1
b = 0
Case b1
b = 1
Case b2
b = 2
Case c2
b = 3
・
・
・
End Select
Open Userform2 (オブジェクト名)
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Private Sub UserForm_Initialize() 'Userform2
cmb.listindex = b
End Sub

No.1ベストアンサー
- 回答日時:
以下のようにしてください。
尚、Private Sub UserForm_Initialize() 'Userform2で
cmb.listindex = b は、Sub btn_Clickでbの値を設定する前にUserForm_Initializeが実行されますので
bに正しい値を設定しても、その値がcmb.listindexに反映されません。
従って、
①Private Sub UserForm_Initialize() 'Userform2 では何もしない。
②Private Sub Btn_Click()で直接、cmb.listindexを書き換える。
ことが必要です。
あと、userformの表示はopenでなく、showを使用します。
---------------------------------------
Private Sub Btn_Click()
Dim text As String
Dim i As Long
text = Txt.text
UserForm2.Cmb.ListIndex = -1
For i = 0 To UserForm2.Cmb.ListCount - 1
If text = UserForm2.Cmb.List(i, 0) Then
UserForm2.Cmb.ListIndex = i
End If
Next
If UserForm2.Cmb.ListIndex = -1 Then
MsgBox ("該当なし")
Exit Sub
End If
UserForm2.Show
End Sub
早々のご回答ありがとうございす。返事が遅くなって申し訳ありませんでした。
ご回答いただいた内容大変参考になりました。詰まっていた箇所もうまくいきましたし、今後の作業でも活用できそうです。
今回は本当にありがとうございした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) エクセル VBAについて 2 2022/05/16 16:33
- Visual Basic(VBA) VBA シート上にドロップダウンリストを作り、予め指定値をセットしたいのですが 1 2023/03/25 15:15
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
vb6のVSFlexGridで選択行、列の...
-
VC++.netでaviを制御するには・・
-
MaskEditBoxへ値の設定を行いたい
-
VB.NETでコンボボックスの1行目...
-
ユーザーフォームのテキストボ...
-
midiのデルタタイムについて
-
C#の質問です
-
オペランド
-
RGB値をL*a*b*に変換したい
-
C#でのDateTimeAddDaysの挙動
-
0から86400秒までの下2桁を取り...
-
ダイアログボックスにリストビ...
-
変数に代入してある数値を表示...
-
TeraTerm inputboxについて
-
DataGridViewのコンボボックス...
-
Excel VBAのリストボックスの値...
-
型の変換の仕方がわかりません
-
値を返さないコード パス
-
VBのテキストボックスに値が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
VBA ドロップダウンリストを残...
-
Excel VBAのリストボックスの値...
-
値を返さないコード パス
-
VB.NETでコンボボックスの1行目...
-
VB初心者。小数点以下の表示で...
-
Excel VBA 複数選択したリスト...
-
C#の質問です
-
マクロで奇数と偶数の値を2か所...
-
変数名の取得
-
マクロ 特定のセル値のみクリ...
-
シーケンサで最小値を保持する
-
[VB.net] DataGridViewのコンボ...
-
Powershellのparamについて
-
PL/SQLでのTO_DATEの時間取得に...
-
【C++/CLI.NET】コンボボックス...
-
ユーザーフォームのテキストボ...
-
VB.NETのスクロールバーコント...
-
VB.NETでアクティブなformを知...
-
vb6のVSFlexGridで選択行、列の...
おすすめ情報