4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】Excel VBAで取締役会の出欠管理アプリを作る(欠席理由・重複防止・出席者一覧付き)

4
Posted at

こんにちは!まっつんです。
今回は VBA を使って、身近な業務課題にアプローチしてみました。

はじめに

取締役会や会議の出欠管理を

  • 紙でチェック
  • 後からExcelに転記

していませんか?

会議実施前や会議中はバタバタしていて、つい後回しにしてしまいがち。
そしてそのまま忘れてしまい、結果調べ直しに時間がかかってしまいます。

本記事では Excel初心者でも作れるVBA を使って、
「入力が簡単・ミスが少ない・会議後の資料作成が楽」
出欠管理アプリを作ります。

完成すると、次のことができます。

  • 出欠をボタン1つで記録
  • 欠席時のみ理由を入力
  • 同じ人の二重登録を防止
  • 会議終了後に「出席者一覧」を自動作成

作成したもの

エクセルベースでVBAを使って簡単に記録できる仕様

  • 入力シートで
    「実施日・氏名・出欠」を選択
  • [記録する]ボタンを押す
  • 記録シートに縦に自動保存
  • [出席者一覧]ボタンで会議資料用一覧を生成

全体構成(シート設計)

シート名 役割
入力 出欠を入力する画面
記録 出欠ログ(縦に蓄積)
名簿 氏名マスタ
出席者一覧 会議後に自動作成

STEP1:Excelファイルを準備する

  1. 新規Excelを作成
  2. 名前を付けて保存
    • Excel マクロ有効ブック(.xlsm)

STEP2:名簿シートを作る

シート名:名簿

A列に取締役の氏名を縦に入力します。

A1:氏名
A2:○○○○
A3:△△△△
A4:□□□□


STEP3:入力シートを作る

シート名:入力

セル 内容
B2 実施日
B4 氏名
B6 出欠
B8 欠席理由(欠席時のみ)

氏名(B4)をドロップダウンにする

  • データ → データの入力規則
  • 種類:リスト
  • 元の値
    =名簿!A2:A50

出欠(B6)をドロップダウンにする

出席,欠席,途中退席,オンライン


STEP4:記録シートを作る

シート名:記録

A1:記録日時
B1:実施日
C1:氏名
D1:出欠
E1:欠席理由

2行目以降は空欄でOKです。


STEP5:VBAを登録する

VBA画面を開く

  • Alt + F11
  • 「挿入」→「標準モジュール」

以下をそのまま貼り付け

Sub 出欠を記録する()

    Dim wsInput As Worksheet
    Dim wsLog As Worksheet
    Dim targetRow As Long
    Dim i As Long
    Dim answer As VbMsgBoxResult

    Set wsInput = Worksheets("入力")
    Set wsLog = Worksheets("記録")

    ' 必須入力チェック
    If wsInput.Range("B2") = "" _
        Or wsInput.Range("B4") = "" _
        Or wsInput.Range("B6") = "" Then

        MsgBox "未入力の項目があります", vbExclamation
        Exit Sub
    End If

    ' 欠席時は理由必須
    If wsInput.Range("B6").Value = "欠席" _
        And wsInput.Range("B8").Value = "" Then

        MsgBox "欠席理由を入力してください", vbExclamation
        Exit Sub
    End If

    targetRow = 0

    ' 実施日+氏名を検索
    For i = 2 To wsLog.Cells(wsLog.Rows.Count, 1).End(xlUp).Row
        If wsLog.Cells(i, 2).Value = wsInput.Range("B2").Value _
           And wsLog.Cells(i, 3).Value = wsInput.Range("B4").Value Then
            targetRow = i
            Exit For
        End If
    Next i

    ' 既存データがあった場合
    If targetRow > 0 Then
        answer = MsgBox("既に登録があります。上書きしますか?", _
                         vbQuestion + vbYesNo)

        If answer = vbNo Then Exit Sub
    Else
        ' 新規の場合は次の空行
        targetRow = wsLog.Cells(wsLog.Rows.Count, 1).End(xlUp).Row + 1
    End If

    ' 記録(上書き or 新規)
    wsLog.Cells(targetRow, 1).Value = Now
    wsLog.Cells(targetRow, 2).Value = wsInput.Range("B2").Value
    wsLog.Cells(targetRow, 3).Value = wsInput.Range("B4").Value
    wsLog.Cells(targetRow, 4).Value = wsInput.Range("B6").Value
    wsLog.Cells(targetRow, 5).Value = wsInput.Range("B8").Value

    ' 入力欄クリア
    wsInput.Range("B4,B6,B8").ClearContents

End Sub


Sub 出席者一覧を作成する()

    Dim wsInput As Worksheet
    Dim wsLog As Worksheet
    Dim wsList As Worksheet
    Dim lastRow As Long
    Dim outRow As Long
    Dim i As Long
    Dim targetDate As Date

    Set wsInput = Worksheets("入力")
    Set wsLog = Worksheets("記録")
    Set wsList = Worksheets("出席者一覧")

    ' 実施日を取得
    If wsInput.Range("B2").Value = "" Then
        MsgBox "実施日が入力されていません", vbExclamation
        Exit Sub
    End If

    targetDate = wsInput.Range("B2").Value

    ' 一覧をクリア
    wsList.Range("A6:C1000").ClearContents

    wsList.Range("B3").Value = targetDate

    outRow = 6

    lastRow = wsLog.Cells(wsLog.Rows.Count, 1).End(xlUp).Row

    ' 記録シートをチェック
    For i = 2 To lastRow
        If wsLog.Cells(i, 2).Value = targetDate _
           And (wsLog.Cells(i, 4).Value = "出席" _
                Or wsLog.Cells(i, 4).Value = "オンライン") Then

            wsList.Cells(outRow, 1).Value = outRow - 5
            wsList.Cells(outRow, 2).Value = wsLog.Cells(i, 3).Value
            wsList.Cells(outRow, 3).Value = wsLog.Cells(i, 4).Value

            outRow = outRow + 1
        End If
    Next i

    MsgBox "出席者一覧を作成しました", vbInformation

End Sub

STEP6:記録ボタンを配置する

入力シート

開発 → 挿入 → フォームコントロール(ボタン)

マクロ:出欠を記録する


使ってみよう

出席入力

アプリ①.jpg

欠席だと理由を記入するよう注意

アプリ③.jpg

出来上がったリストがこちら

アプリ④.jpg

日時毎に一覧も作成可能

アプリ②.jpg


おわりに

このExcelは

  • VBA30行程度

  • 初心者向け構文のみ

  • 実務で即使える

を意識して作りました。

「まずは小さく作る → 改良する」
その第一歩として、ぜひ使ってみてください。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?