ユーザーフォームで、コンボボックスの選択肢に応じて テキストボックスの表示を動的に変更する方法をご紹介します。
ぜひお試しください😉
ユーザーフォーム作成
ユーザーフォームを作成します。
Excelシート概要
ユーザーフォームで「店舗」を選択すると、
その店舗の商品名と価格を表示します。
Excelシートにマクロボタン設置
「Sheet1」にマクロボタンを設置します。
以下コードを標準モジュール「Module1」に入力して、
ボタンをクリックしたときに、ユーザーフォームが開くようにします。
Sub ボタン1_Click()
UserForm1.Show vbModeless
End Sub
マクロコードを「Module1」に入力した画面
マクロコードを入力
マクロコードを「UserForm1」に入力します。
Option Explicit
Dim kakaku As Long
Dim i As Long
Dim tempo As Long
Private Sub ComboBox1_Change()
'ComboBox1で選択された店舗の名前が、シートの1行目でどの位置にあるかを探す
tempo = Application.WorksheetFunction.Match(Me.ComboBox1.Value, Range("1:1"), 0)
'ComboBox2の内容をクリアし、新たに商品名と価格を表示する準備をする
kakaku = 0
Me.ComboBox2.Clear
'選択された店舗の列(tempo)に沿って、商品名と価格をComboBox2に追加
For i = 2 To Cells(Rows.Count, tempo).End(xlUp).Row
Me.ComboBox2.AddItem ""
Me.ComboBox2.List(kakaku, 0) = Cells(i, tempo).Value
Me.ComboBox2.List(kakaku, 1) = Cells(i, tempo + 1).Value
kakaku = kakaku + 1
Next i
'商品価格を表示するTextBox1をクリアする
Me.TextBox1.Value = ""
End Sub
Private Sub ComboBox2_Change()
'ComboBox2で選択された商品に対応する価格をTextBox1に表示する
With Me.ComboBox2
If .ListIndex >= 0 Then
Me.TextBox1.Value = .List(.ListIndex, 1)
End If
End With
End Sub
Private Sub CommandButton1_Click()
'「登録」ボタンがクリックされた時の処理を記述する場所
End Sub
Private Sub CommandButton2_Click()
'「キャンセル」ボタンがクリックされた時の処理を記述する場所
End Sub
Private Sub UserForm_Initialize()
' UserFormが初期化された時に一度だけ実行される処理
'ComboBox1にシートのA列から店舗名を読み込む
Me.ComboBox1.Clear
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
Me.ComboBox1.AddItem Cells(i, 1).Value
Next i
'ComboBox2を初期化し、1列目のみ表示するように設定する
'(ここでは価格は隠される)
With Me.ComboBox2
.ColumnCount = 1
End With
End Sub
マクロコードを入力する場所「UserForm1」
動作
ComboBox1 で 「店舗」を選択すると、
ComboBox2 に 「商品名」が表示されます。
ComboBox2 で 「商品名」を選択すると、
TextBox1 に 「金額」が自動表示されます。
この記事がお役に立ちますと幸いです🍀
・【ExcelVBA】ユーザーフォーム作成の事例まとめ
【VBAユーザーフォーム】何ができるの?:使用例34選
...
「今すぐ使えるかんたんmini Excel マクロ&VBAの基本と便利がこれ1冊でわかる本」
基礎から応用まで丁寧に解説されており、VBAの初心者も安心して学ぶことができる
実務に直結する便利なワザを豊富に紹介。日々の業務を効率化する技術が満載!
リンク