ユーザーフォーム内で部署、課、社員の情報をコンボボックスで連携させる方法を解説します。
ぜひお試しください😉
ユーザーフォーム作成
ユーザーフォームを作成します。
Excelシート概要
A列に「部署」、B列に「課」、C列に「氏名」を入力しておきます。
Excelシートにマクロボタン設置
「Sheet1」にマクロボタンを設置します。
以下コードを標準モジュール「Module1」に入力して、
ボタンをクリックしたときに、ユーザーフォームが開くようにします。
Sub ボタン1_Click()
UserForm1.Show vbModeless
End Sub
マクロコードを「Module1」に入力した画面
マクロコードを入力
マクロコードを「UserForm1」に入力します。
Option Explicit
Private Sub UserForm_Initialize()
' 初期化時に部署名をコンボボックス1に表示
LoadDepartments ComboBox1
' コンボボックス2, 3を空に
ComboBox2.Clear
ComboBox3.Clear
End Sub
Private Sub LoadDepartments(combo As MSForms.ComboBox)
' コンボボックスに部署の名称を表示
Dim cell As Range
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
' Sheet1のA列をループして、重複しない値をコンボボックスに追加
For Each cell In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "A").End(xlUp).Row)
If Not dict.exists(cell.Value) Then
combo.AddItem cell.Value
dict.Add cell.Value, Nothing
End If
Next cell
End Sub
Private Sub ComboBox1_Change()
' 部署が選択されたら、関連する課をコンボボックス2に表示
LoadSections ComboBox1.Value, ComboBox2
' コンボボックス3を空に
ComboBox3.Clear
End Sub
Private Sub LoadSections(department As String, combo As MSForms.ComboBox)
' 選択された部署に基づいて、課の名称をコンボボックスに表示
Dim cell As Range
Dim dict As Object
combo.Clear
' 部署が空白の場合は何もしない
If department = "" Then Exit Sub
Set dict = CreateObject("Scripting.Dictionary")
' 選択された部署に該当する課をコンボボックスに追加
For Each cell In Sheet1.Range("B2:B" & Sheet1.Cells(Rows.Count, "B").End(xlUp).Row)
If cell.Offset(0, -1).Value = department And Not dict.exists(cell.Value) Then
combo.AddItem cell.Value
dict.Add cell.Value, Nothing
End If
Next cell
End Sub
Private Sub ComboBox2_Change()
' 課が選択されたら、関連する社員名をコンボボックス3に表示
LoadEmployees ComboBox1.Value, ComboBox2.Value, ComboBox3
End Sub
Private Sub LoadEmployees(department As String, section As String, combo As MSForms.ComboBox)
' 選択された部署と課に基づいて、社員名をコンボボックスに表示
Dim cell As Range
combo.Clear
' 課が空白の場合は何もしない
If section = "" Then Exit Sub
' 選択された部署と課に該当する社員名をコンボボックスに追加
For Each cell In Sheet1.Range("C2:C" & Sheet1.Cells(Rows.Count, "C").End(xlUp).Row)
If cell.Offset(0, -2).Value = department And cell.Offset(0, -1).Value = section Then
combo.AddItem cell.Value
End If
Next cell
End Sub
マクロコードを入力する場所「UserForm1」
動作
コンボボックス1 に表示されている部署一覧から一つを選択します。
選択した部署に対応する課の一覧が、コンボボックス2 に表示されます。
関連する社員一覧がコンボボックス3 に表示されるので、名前を選択します。
この記事がお役に立ちますと幸いです🍀
・【ExcelVBA】ユーザーフォーム作成の事例まとめ
【VBAユーザーフォーム】何ができるの?:使用例34選
...
「今すぐ使えるかんたんmini Excel マクロ&VBAの基本と便利がこれ1冊でわかる本」
基礎から応用まで丁寧に解説されており、VBAの初心者も安心して学ぶことができる
実務に直結する便利なワザを豊富に紹介。日々の業務を効率化する技術が満載!
リンク