コメントありがとうございます! 表の左上がA1セルになるように、下記のリストをシートに入力します。 ↓シートに入力するリスト 総務部 営業部 経理部 総務第1課 営業第1課 経理第1課 総務第2課 営業第2課 経理第2課 総務第3課 営業第3課 経理第3課 ↓ユーザーフォームに作成する項目 「UserForm1」を作成して、「コンボボックス」を2つ作成します。オブジェクト名は、デフォルトのままとして、「ComboBox1」と「ComboBox2」とします。 次のように、「UserForm1」のVBAコードを記載します。 ↓ユーザーフォームのVBAコード Private Sub UserForm_Initialize() For j = 1 To 3 ComboBox1.AddItem Cells(1, j) Next End Sub Private Sub ComboBox1_Change() ComboBox2.Clear For j = 1 To 3 If ComboBox1.Text = Cells(1, j) Then For i = 2 To 4 ComboBox2.AddItem Cells(i, j) Next Exit For End If Next ComboBox2.SetFocus SendKeys "%{DOWN}" End Sub ↓実行した結果 これで、「ComboBox1」のリストを選択すると、それに連動して「ComboBox2」のリストが変更されます。変更されたリストを使って、「ComboBox2」から値を選択することができます。 VBAコードの流れとしては、次のようになります。 ↓VBAコードの流れ ・ユーザーフォームの「Initialize」イベントで、「ComboBox1」のリストにA1~C1の値を設定 ・「ComboBox1」の「Change」イベントで、「ComboBox1」の値が変更されたタイミングで実行 ・「ComboBox1」の値が入力されているシートの「列番号」を取得 ・「列番号」の2~4行目のリストを「ComboBox2」のリストに登録 参考になればと思います(^^)不明な点がございましたら、コメントいただければと思います。
コメントありがとうございます! 原因としては次が考えられます。 ①KeyDownイベントがうまく実行していない ②大文字小文字、全角半角の違いでうまく検索できていない ■原因① ①が実行できているかの確認で、次のVBAコードを実行した場合は、メッセージが表示されますでしょうか。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode vbKeyReturn Then Exit Sub 'Enter以外は、処理を終了
MsgBox "A"
End Sub ■原因② 原因①で実行できた場合は、検索する際に「大文字小文字」や「全角半角」の違いでうまく検索できていない可能性があります。 例えば、検索は小文字の「A」で検索したけど、入力されているのは大文字の「A」というような場合です。 「InStr」の引数をうまく使うことで、全角や半角、大文字や小文字、ひらがなカタカナを区別せずに検索することができます。 VBAコードは、次のようになります。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode vbKeyReturn Then Exit Sub 'Enter以外は、処理を終了 ListBox1.Clear 'リストボックスをクリア 'データベースを検索 For i = 2 To Sheets("DB").Cells(Rows.Count, "A").End(xlUp).Row '部分一致で商品を検索 If InStr(1, Sheets("DB").Cells(i, "A"), TextBox1.Text, vbTextCompare) > 0 Then ListBox1.AddItem Sheets("DB").Cells(i, "A") 'リストボックスに値を追加 End If Next
End Sub 「InStr(1, 文字列1, 文字列2, vbTextCompare)」というように使うことで、大文字小文字、全角半角、ひらがなカタカナを区別せずに検索することができます。 上記の2つの方法でまずは確認してみるといいかもしれません。 参考になればと思います(^^)
毎回、良い動画をありがとうございます。
大変、参考になります!
とても勉強になりました。今、ユーザーフォームで2段階のプルダウンリストを作成したいのですが、苦慮しています。
例えば1つ目のプルダウンリストで総務部、営業部、経理部といった部を選択し、2つ目のプルダウンリストでそれぞれの
部に所属する課を選択するといった事をしたいです。
エクセルの機能で簡単にできるのは知っているのですが、ユーザーフォーム上で実行するにはどうしたらいいか
私の知識ではわかりません。大変厚かましいのですが、もし可能であればご教授願いたいです。よろしくお願いします。
コメントありがとうございます!
表の左上がA1セルになるように、下記のリストをシートに入力します。
↓シートに入力するリスト
総務部 営業部 経理部
総務第1課 営業第1課 経理第1課
総務第2課 営業第2課 経理第2課
総務第3課 営業第3課 経理第3課
↓ユーザーフォームに作成する項目
「UserForm1」を作成して、「コンボボックス」を2つ作成します。オブジェクト名は、デフォルトのままとして、「ComboBox1」と「ComboBox2」とします。
次のように、「UserForm1」のVBAコードを記載します。
↓ユーザーフォームのVBAコード
Private Sub UserForm_Initialize()
For j = 1 To 3
ComboBox1.AddItem Cells(1, j)
Next
End Sub
Private Sub ComboBox1_Change()
ComboBox2.Clear
For j = 1 To 3
If ComboBox1.Text = Cells(1, j) Then
For i = 2 To 4
ComboBox2.AddItem Cells(i, j)
Next
Exit For
End If
Next
ComboBox2.SetFocus
SendKeys "%{DOWN}"
End Sub
↓実行した結果
これで、「ComboBox1」のリストを選択すると、それに連動して「ComboBox2」のリストが変更されます。変更されたリストを使って、「ComboBox2」から値を選択することができます。
VBAコードの流れとしては、次のようになります。
↓VBAコードの流れ
・ユーザーフォームの「Initialize」イベントで、「ComboBox1」のリストにA1~C1の値を設定
・「ComboBox1」の「Change」イベントで、「ComboBox1」の値が変更されたタイミングで実行
・「ComboBox1」の値が入力されているシートの「列番号」を取得
・「列番号」の2~4行目のリストを「ComboBox2」のリストに登録
参考になればと思います(^^)不明な点がございましたら、コメントいただければと思います。
@@IT-gx8sf ありがとうございます!ちょっと時間かかると思いますがやってみます。
こんなにすぐ返事いただけると思っていませんでした。本当にありがとうございます。
先生、エンターを押しても
検索できません!
どうしたら良いですか?
何かヒントでも教えて頂かないでしょうか
コメントありがとうございます!
原因としては次が考えられます。
①KeyDownイベントがうまく実行していない
②大文字小文字、全角半角の違いでうまく検索できていない
■原因①
①が実行できているかの確認で、次のVBAコードを実行した場合は、メッセージが表示されますでしょうか。
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode vbKeyReturn Then Exit Sub 'Enter以外は、処理を終了
MsgBox "A"
End Sub
■原因②
原因①で実行できた場合は、検索する際に「大文字小文字」や「全角半角」の違いでうまく検索できていない可能性があります。
例えば、検索は小文字の「A」で検索したけど、入力されているのは大文字の「A」というような場合です。
「InStr」の引数をうまく使うことで、全角や半角、大文字や小文字、ひらがなカタカナを区別せずに検索することができます。
VBAコードは、次のようになります。
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode vbKeyReturn Then Exit Sub 'Enter以外は、処理を終了
ListBox1.Clear 'リストボックスをクリア
'データベースを検索
For i = 2 To Sheets("DB").Cells(Rows.Count, "A").End(xlUp).Row
'部分一致で商品を検索
If InStr(1, Sheets("DB").Cells(i, "A"), TextBox1.Text, vbTextCompare) > 0 Then
ListBox1.AddItem Sheets("DB").Cells(i, "A") 'リストボックスに値を追加
End If
Next
End Sub
「InStr(1, 文字列1, 文字列2, vbTextCompare)」というように使うことで、大文字小文字、全角半角、ひらがなカタカナを区別せずに検索することができます。
上記の2つの方法でまずは確認してみるといいかもしれません。
参考になればと思います(^^)
@@IT-gx8sf 先生のご教授があり、無事に仕事が捗りました!
先生本当に感謝しかありません。
また宜しくお願いします🤲