ユーザーフォーム コンボボックス 部署・課・社員を3つ連動 VBA

ユーザーフォーム コンボボックス 部署・課・社員を3つ連動 VBA-アイキャッチ ExcelVBA

ユーザーフォーム内で部署、課、社員の情報をコンボボックスで連携させる方法を解説します。

ぜひお試しください😉

ユーザーフォーム作成

ユーザーフォームを作成します。


 

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の初心者も安心して学ぶことができる
実務に直結する便利なワザを豊富に紹介。日々の業務を効率化する技術が満載!