社員名簿を作る ~その3~

Excelマクロによる業務効率化
  1. 10.社員の基本情報・異動情報の変更、入社・異動・退職を入力する
    1. (1)異動情報入力フォームを作成する(ユーザーフォーム)
      1. ①まずは、ユーザーフォームを挿入します。
      2. ②ユーザーフォームの一行目は社員名を絞り込み検索するための部署名用のボックス(コンボボックス)を4つ配置します。
      3. ③2行目は、社員番号用のボックス(テキストボックス)と氏名用のボックス(コンボボックス)を配置します。
      4. ④次に、基本情報と異動情報を入力スペースをマルチページを使って確保します。
      5. ⑤マルチページの基本情報ページに、各基本情報のボックス(テキストボックス)を配置する。
      6. ⑥マルチページの「異動情報」ページに、各異動情報のボックス(コンポボックス)を配置する。
      7. ⑦基本情報や異動情報を「社員基本情報」シートや「異動DB」シートに書き込むプログラムを実行するためのコマンドボタンを配置します。
      8. ⑧最後に、各テキストボックス、コンボボックスの内容を示す「ラベル」を配置します。
    2. (2)コンボボックスのアイテム(リスト)を設定する。
    3. (3)社員氏名の絞り込み検索の設定
      1.  ①検索シートの作成
      2. ②検索用のコードを記入する。
    4. (4)社員氏名のコンボボックスで特定社員を選択したときに、選択した社員の「社員情報」と「異動情報」の内容を読み込むコードを記入します。
    5. (5)社員基本情報に変更があるとき、「社員基本情報」シートの内容を変更するコードを記入する。
    6. (6)社員異動情報に変更があるとき「社員DB」シートの内容を変更するコードを記入する。
    7. (7)社員退職時に退職情報を「異動DBシート」に入力するコードを記入する。
    8. (8)最後にUserForm2を起動するコマンドボタンをmenuシートに配置します
  2. 11.人事システムの操作方法

10.社員の基本情報・異動情報の変更、入社・異動・退職を入力する

 社員の異動情報の入力フォームもユーザーフォームを活用します。所属部署を選択して社員を絞り込み、絞り込んだ中から特定の社員を選択すると、当該社員の現在の情報を全て読み込みます。読み込んだ情報のうち、変更箇所を変更すれば、データベースに反映される仕組みを作っていきます。

(1)異動情報入力フォームを作成する(ユーザーフォーム)

①まずは、ユーザーフォームを挿入します。

 「開発」タグ → 「Visual Basic」

 「Visual Basic」の「挿入」タグ → 「ユーザーフォーム」を選択します。

②ユーザーフォームの一行目は社員名を絞り込み検索するための部署名用のボックス(コンボボックス)を4つ配置します。

 開いた「UserForm2」の右下の角をドラッグして大きさを調整します。

 「表示」タグ → 「ツールボックス」を選択して、ツールボックスを表示させます。

「ツールボックス」の「コンボボックス」を選択して、ユーザーフォーム上で適当な大きさにドラッグして配置します。

同様にして、合計4つコンボボックスを並べます。

③2行目は、社員番号用のボックス(テキストボックス)と氏名用のボックス(コンボボックス)を配置します。

 「ツールボックス」の「テキストボックス」を選択して、ユーザーフォーム上で適当な大きさにドラッグして配置します。

 同じく「ツールボックス」の「コンボボックス」を選択して、ユーザーフォーム上に配置します。

④次に、基本情報と異動情報を入力スペースをマルチページを使って確保します。

 「ツールボックス」の「マルチページ」を選択して、ユーザーフォーム上で適当な大きさにドラッグして配置します。

 マルチページの1目のタグに「基本情報」、2つ目のタグに「異動情報」と入力します。

⑤マルチページの基本情報ページに、各基本情報のボックス(テキストボックス)を配置する。

 まず、マルチページの「基本情報」のタグを選択します。

 次に、「ツールボックス」の「テキストボックス」を選択して、マルチページの「基本情報」ページ上で適当な大きさにドラッグしてテキストボックスを配置します。

 同様にして、計15個(「性別」「生年月日」「年齢」「血液型」「入社年月日」「勤続年数」「郵便番号」「住所」「電話番号」「携帯番号」「メールアドレス」「最終学歴」「健康保険番号」「年金番号」「基礎年金番号」)のテキストボックスを配置します。

⑥マルチページの「異動情報」ページに、各異動情報のボックス(コンポボックス)を配置する。

 まず、マルチページの「異動情報」のタグを選択します。

 次に、「ツールボックス」の「コンボボックス」を選択して、マルチページの「異動情報」ページ上で適当な大きさにドラッグしてコンボボックスを配置します。

 同様にして、計9個(「本部」「部」「課」「係」「雇用形態」「職掌」「格付1」「格付2」「役職」)のコンボボックスを配置します。

⑦基本情報や異動情報を「社員基本情報」シートや「異動DB」シートに書き込むプログラムを実行するためのコマンドボタンを配置します。

ⅰ まず「マルチページ」の「基本情報」ページ上に1つ配置します。

「ツールボックス」の「コマンドボタン」を選択して、マルチページの「基本情報」ページ上で適当な大きさにドラッグしてコマンドボタンを配置しボタンの表示を「更新」に変更します。

ⅱ 次に、マルチページの「異動情報」ページ上にも同様に1つ「コマンドボタン」を配置しボタンの表示を「更新」に変更します。

ⅲ 最後に、ユーザーフォームの右上に、コマンドボタンを1つ配置しボタンの表示を「退職」に変更します。

⑧最後に、各テキストボックス、コンボボックスの内容を示す「ラベル」を配置します。

 ラベルは「ツールボックス」の「ラベル」を選択し、適当な大きさにドラッグして配置し、表示名を入力することで作成できます。これを全てのボックスについて、行います。

(2)コンボボックスのアイテム(リスト)を設定する。

 以上で、ユーザーフォームのボックスとボタンの配置は完了しました。次に、コードを入力していきます。

 まずは、コンボボックスのアイテムリストを設定するコードを記入します。

 UserForm2モジュールを開きます。

 下記コードを「UserForm2モジュール」に記入(コピペ)します。

Private Sub UserForm_Initialize()
    Dim i As Integer
    
    For i = 2 To Worksheets("組織マスター").Cells(Rows.Count, 1).End(xlUp).Row
        ComboBox1.AddItem Worksheets("組織マスター").Range("a" & i).Value
        ComboBox6.AddItem Worksheets("組織マスター").Range("a" & i).Value
    Next i
    
    For i = 2 To Worksheets("組織マスター").Cells(Rows.Count, 3).End(xlUp).Row
        ComboBox2.AddItem Worksheets("組織マスター").Range("c" & i).Value
        ComboBox7.AddItem Worksheets("組織マスター").Range("c" & i).Value
    Next i
    
    For i = 2 To Worksheets("組織マスター").Cells(Rows.Count, 5).End(xlUp).Row
        ComboBox3.AddItem Worksheets("組織マスター").Range("e" & i).Value
        ComboBox8.AddItem Worksheets("組織マスター").Range("e" & i).Value
    Next i
    
    For i = 2 To Worksheets("組織マスター").Cells(Rows.Count, 7).End(xlUp).Row
        ComboBox4.AddItem Worksheets("組織マスター").Range("g" & i).Value
        ComboBox9.AddItem Worksheets("組織マスター").Range("g" & i).Value
    Next i
    
    For i = 3 To Worksheets("現在の社員名簿").Cells(Rows.Count, 16).End(xlUp).Row
        ComboBox5.AddItem Worksheets("現在の社員名簿").Range("p" & i).Value
    Next i
   
    For i = 2 To Worksheets("組織マスター").Cells(Rows.Count, 10).End(xlUp).Row
        ComboBox10.AddItem Worksheets("組織マスター").Range("j" & i).Value
    Next i
    
    For i = 2 To Worksheets("組織マスター").Cells(Rows.Count, 12).End(xlUp).Row
        ComboBox11.AddItem Worksheets("組織マスター").Range("l" & i).Value
    Next i
    
    For i = 2 To Worksheets("組織マスター").Cells(Rows.Count, 13).End(xlUp).Row
        ComboBox12.AddItem Worksheets("組織マスター").Range("m" & i).Value
    Next i
    
    For i = 2 To Worksheets("組織マスター").Cells(Rows.Count, 15).End(xlUp).Row
        ComboBox13.AddItem Worksheets("組織マスター").Range("o" & i).Value
    Next i
    
    For i = 2 To Worksheets("組織マスター").Cells(Rows.Count, 17).End(xlUp).Row
        ComboBox14.AddItem Worksheets("組織マスター").Range("q" & i).Value
    Next i
End Sub

(3)社員氏名の絞り込み検索の設定

 「本部」「部」「課」「係」を選択すると、該当する社員氏名のアイテムリストが絞り込まれるように設定します。

 やり方としては、Excelのフィルター機能をマクロで動かします。

 ①検索シートの作成

 まずは、検索用のシートを作成し、シート名を「検索」に変更します。

 次に、「検索」シートの1行目と、4行目のA列からG列に、「社員番号」「本部」「部」「課」「係」「役職」「氏名」とそれぞれ入力します。

②検索用のコードを記入する。

 ⅰ まず「UserForm2モジュール」に下記コードを記入します。

Private Sub ComboBox1_Change()
    Worksheets("検索").Cells(2, 2) = ComboBox1.Value
    
    Call Module3.kensaku
End Sub

Private Sub ComboBox2_Change()
    Worksheets("検索").Cells(2, 3) = ComboBox2.Value
    
    Call Module3.kensaku
End Sub

Private Sub ComboBox3_Change()
    Worksheets("検索").Cells(2, 4) = ComboBox3.Value
    
    Call Module3.kensaku
End Sub

Private Sub ComboBox4_Change()
    Worksheets("検索").Cells(2, 5) = ComboBox4.Value
    
    Call Module3.kensaku
End Sub

 ⅱ 次に、標準モジュール(Module3)を挿入します。

  「VisualBasic」の「挿入」タグから「標準モジュール」を選択します。

 ⅲ 「標準モジュール(Module3)」に下記コードを記入します。

Sub kensaku()
    Dim i As Integer
    i = Worksheets("現在の社員名簿").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("現在の社員名簿").Range("A2:AE" & i).AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Worksheets("検索").Range("A1:G2"), CopyToRange:=Worksheets("検索").Range("A4:G4"), Unique:=False
    
    UserForm2.ComboBox5.Object.Clear
    For i = 5 To Worksheets("検索").Cells(Rows.Count, 7).End(xlUp).Row
        UserForm2.ComboBox5.AddItem Worksheets("検索").Range("g" & i).Value
    Next i
End Sub

(4)社員氏名のコンボボックスで特定社員を選択したときに、選択した社員の「社員情報」と「異動情報」の内容を読み込むコードを記入します。

 「UserForm2モジュール」に下記コードを記入します。

Private Sub ComboBox5_Change()
    For i = 1 To 16
        Me.Controls("TextBox" & i).Value = ""
    Next i
    For i = 6 To 14
        Me.Controls("ComboBox" & i).Value = ""
    Next i
    
    Dim rcd As Range, simei As String
    simei = ComboBox5.Value
    Set rcd = Worksheets("現在の社員名簿").Range("p:p").Find(simei, lookat:=xlWhole)
    If Not rcd Is Nothing Then
        TextBox1 = rcd.Offset(0, -14)
        For i = 2 To 16
            Me.Controls("TextBox" & i).Value = rcd.Offset(0, i - 1)
        Next i
        
        ComboBox6.Value = rcd.Offset(0, -13)
        ComboBox7.Value = rcd.Offset(0, -12)
        ComboBox8.Value = rcd.Offset(0, -11)
        ComboBox9.Value = rcd.Offset(0, -10)
        ComboBox10.Value = rcd.Offset(0, -8)
        ComboBox11.Value = rcd.Offset(0, -6)
        ComboBox12.Value = rcd.Offset(0, -5)
        ComboBox13.Value = rcd.Offset(0, -4)
        ComboBox14.Value = rcd.Offset(0, -2)    
    End If
End Sub

(5)社員基本情報に変更があるとき、「社員基本情報」シートの内容を変更するコードを記入する。

 「UserForm2モジュール」に下記コードを記入します。

Private Sub CommandButton1_Click()
    Dim rcd As Range, syain_no As Integer
    syain_no = Val(TextBox1.Text)
    If syain_no = 0 Then
        MsgBox "社員番号を入力してください"
        Exit Sub
    End If
    
    Set rcd = Worksheets("社員基本情報").Range("a:a").Find(syain_no, lookat:=xlWhole)
    If rcd Is Nothing Then
        Dim rc As VbMsgBoxResult
        Dim n As Integer, i As Integer
        rc = MsgBox("新規社員情報を追加しますか?", vbYesNo + vbQuestion)
        If rc = vbYes Then
            With Worksheets("社員基本情報")
                n = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                .Cells(n, 1) = TextBox1.Value
                .Cells(n, 2) = ComboBox5.Value
                .Cells(n, 3) = TextBox2.Value
                .Cells(n, 4) = TextBox3.Value
                .Cells(n, 5) = TextBox5.Value
                .Cells(n, 6) = TextBox6.Value
                .Cells(n, 7) = TextBox8.Value
                .Cells(n, 8) = TextBox9.Value
                .Cells(n, 9) = TextBox10.Value
                .Cells(n, 10) = TextBox11.Value
                .Cells(n, 11) = TextBox12.Value
                .Cells(n, 12) = TextBox13.Value
                .Cells(n, 13) = TextBox14.Value
                .Cells(n, 14) = TextBox15.Value
                .Cells(n, 15) = TextBox16.Value
            End With
        
            MsgBox "社員基本情報に" & ComboBox5.Value & "さん を追加しました", vbInformation
        Else
            Exit Sub
        End If
    Else
        rc = MsgBox("社員基本情報を更新しますか?", vbYesNo + vbQuestion)
        If rc = vbYes Then
            rcd.Offset(0, 1) = ComboBox5.Value
            rcd.Offset(0, 2) = TextBox2.Value
            rcd.Offset(0, 3) = TextBox3.Value
            rcd.Offset(0, 4) = TextBox5.Value
            rcd.Offset(0, 5) = TextBox6.Value
            rcd.Offset(0, 6) = TextBox8.Value
            rcd.Offset(0, 7) = TextBox9.Value
            rcd.Offset(0, 8) = TextBox10.Value
            rcd.Offset(0, 9) = TextBox11.Value
            rcd.Offset(0, 10) = TextBox12.Value
            rcd.Offset(0, 11) = TextBox13.Value
            rcd.Offset(0, 12) = TextBox14.Value
            rcd.Offset(0, 13) = TextBox15.Value
            rcd.Offset(0, 14) = TextBox16.Value
            MsgBox ComboBox5.Value & "さんの基本情報を更新しました", vbInformation
        Else
            Exit Sub
        End If
    
    End If
End Sub

(6)社員異動情報に変更があるとき「社員DB」シートの内容を変更するコードを記入する。

 「UserForm2モジュール」に下記コードを記入します。

Private Sub CommandButton2_Click()
    Dim rcd As Range, syain_no As Integer, m As Date
    syain_no = Val(TextBox1.Text)
    If syain_no = 0 Then
        MsgBox "社員番号を入力してください"
        Exit Sub
    End If
    
    m = InputBox("異動日を入力してください")
    
    Set rcd = Worksheets("現在の社員名簿").Range("b:b").Find(syain_no, lookat:=xlWhole)
    If rcd Is Nothing Then
        Dim rc As VbMsgBoxResult
        Dim n As Integer, i As Integer
        
        rc = MsgBox("新規社員情報を追加しますか?", vbYesNo + vbQuestion)
        If rc = vbYes Then
            With Worksheets("異動DB")
                n = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                .Cells(n, 1) = 1
                .Cells(n, 2) = m
                .Cells(n, 3) = ""
                .Cells(n, 4) = syain_no
                For i = 5 To 14
                     .Cells(n, i) = Me.Controls("ComboBox" & i).Value
                Next i
            End With
        
            MsgBox "社員基本情報に" & ComboBox5.Value & "さん を追加しました", vbInformation
        Else
            Exit Sub
        End If
    Else
        rc = MsgBox("社員基本情報を更新しますか?", vbYesNo + vbQuestion)
        If rc = vbYes Then
            Dim no As Integer, rcd_no As Range
            no = rcd.Offset(0, -1)
            If Worksheets("異動DB").Cells(no, 3) = "" Then
                Worksheets("異動DB").Cells(no, 3) = m - 1
                With Worksheets("異動DB")
                    n = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                    .Cells(n, 1) = 2
                    .Cells(n, 2) = m
                    .Cells(n, 3) = ""
                    .Cells(n, 4) = syain_no
                    For i = 5 To 14
                         .Cells(n, i) = Me.Controls("ComboBox" & i).Value
                    Next i
                End With
            Else
                MsgBox "すでに異動したデータです。更新できません。「異動DB」で確認下さい"
                Exit Sub
            End If
        Else
            Exit Sub
        End If
    End If
End Sub

(7)社員退職時に退職情報を「異動DBシート」に入力するコードを記入する。

「UserForm2モジュール」に下記コードを記入します。

Private Sub CommandButton3_Click()
    Dim rcd As Range, syain_no As Integer, m As Date
    syain_no = Val(TextBox1.Text)
    
    m = InputBox("異動日を入力してください")

    Set rcd = Worksheets("現在の社員名簿").Range("b:b").Find(syain_no, lookat:=xlWhole)
    If Not rcd Is Nothing Then
        
        Dim rc As VbMsgBoxResult
        Dim n As Integer, i As Integer
        rc = MsgBox(m & ComboBox5.Value & "さん 退職で更新しますか?", vbYesNo + vbQuestion)
        If rc = vbYes Then
            Dim no As Integer, rcd_no As Range
            no = rcd.Offset(0, -1)
            If Worksheets("異動DB").Cells(no, 3) = "" Then
                Worksheets("異動DB").Cells(no, 3) = m
                With Worksheets("異動DB")
                    n = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                    .Cells(n, 1) = 3
                    .Cells(n, 2) = m
                    .Cells(n, 3) = m
                    .Cells(n, 4) = syain_no
                    For i = 5 To 14
                         .Cells(n, i) = Me.Controls("ComboBox" & i).Value
                    Next i
                End With
            Else
                MsgBox "すでに異動したデータです。更新できません。「異動DB」で確認下さい"
                Exit Sub
            End If
        Else
            Exit Sub
        End If
    End If
End Sub

(8)最後にUserForm2を起動するコマンドボタンをmenuシートに配置します

「開発」タグ →「挿入」→ActiveXコントロールの「コマンドボタン」を選択

menuシート上の適当な場所にコマンドボタンを配置して、表示名を変更する。

Visual Basicの「menu」シートモジュールに下記コードを記入する。

Private Sub CommandButton2_Click()
    UserForm2.Show vbModeless
End Sub

11.人事システムの操作方法

人事システムの操作方法を簡単な動画にまとめました。

人事システムの操作法

コメント

タイトルとURLをコピーしました