🧩 はじめに
「勤怠管理を自動化したいけど、現場ではまだExcelを使っている」
そんな会社、多いですよね。
現場はスマホ入力がしたい
でも事務はExcelで集計したい
そして、誰もシステム開発に時間をかけられない
この記事では、Googleフォーム + GAS + Excel VBA だけで
「誰でも導入できる勤怠管理システム」を作る方法を紹介します。
🎯 目標
入力はスマホで
集計はExcelで
操作は“ボタン1つ”だけ
しかも、既存のExcelフォーマットをそのまま使うことがポイントです。
⚙️ システム構成
社員 → Googleフォームで入力
↓
Googleスプレッドシートで自動集計
↓
Excelマクロで個人ファイルに反映
📱 Step1. Googleフォームで入力を受け取る
Googleフォームを作成し、以下の項目を設定します:
日付
開始時間
終了時間
勤務内容
フォームのURLには社員ごとにIDを付けます:
これで、社員が誰かを自動で識別できるようになります。
☁️ Step2. スプレッドシートで氏名を自動補完(GAS)
Googleフォームと連携したスプレッドシートに、
以下のGoogle Apps Scriptを設定します。
// 社員リストのスプレッドシートID
const MASTER_SHEET_ID = "社員リストのスプレッドシートID";
function onFormSubmit(e) {
const sheet = e.range.getSheet();
const row = e.range.getRow();
const id = sheet.getRange(row, 14).getValue(); // N列に社員IDが入っている想定
const master = SpreadsheetApp.openById(MASTER_SHEET_ID);
const data = master.getSheetByName("社員リスト").getDataRange().getValues();
// 社員IDをもとに氏名を補完
for (let i = 0; i < data.length; i++) {
if (data[i][0] == id) {
sheet.getRange(row, 2).setValue(data[i][1]); // B列に氏名を記入
break;
}
}
}
社員がフォームを送信した瞬間に、
ID → 氏名の自動入力が完了します。
これで事務側の照合作業がゼロになります。
💻 Step3. Excel側で自動転記(VBA)
スプレッドシートのデータをCSV形式で公開しておき、
ExcelのVBAから自動取得します。
ここでは、処理の流れの重要部分だけ紹介します👇
📜 VBA(重要部分のみ)
' ▼ GoogleスプレッドシートからCSVを取得
Const CSV_URL As String = "https://docs.google.com/spreadsheets/d/XXXXX/export?format=csv"
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "GET", CSV_URL, False
http.Send
csvData = StrConv(http.ResponseBody, vbUnicode)
lines = Split(csvData, vbLf)
' ▼ 社員名をもとにブックを探索
For i = 1 To UBound(lines)
info = Split(lines(i), ",")
empName = Trim(info(1)) ' B列の氏名
workDetail = Trim(info(4)) ' E列の勤務内容
filePath = FindExcelFile("C:\Users\igucc\OneDrive\デスクトップ\勤怠実験", empName)
If filePath <> "" Then
UpdateExcel filePath, workDetail
End If
Next
' ▼ ファイル名に社員名が含まれるExcelブックを探す
Function FindExcelFile(folderPath As String, key As String) As String
Dim file As Object, fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
For Each file In fso.GetFolder(folderPath).Files
If InStr(file.Name, key) > 0 Then
FindExcelFile = file.Path
Exit Function
End If
Next
End Function
' ▼ 対象ブックの「作業日報」シートに転記
Sub UpdateExcel(filePath As String, workDetail As String)
Dim wb As Workbook, ws As Worksheet
Set wb = Workbooks.Open(filePath)
Set ws = wb.Sheets("作業日報")
ws.Range("G7").Value = workDetail
wb.Close SaveChanges:=True
End Sub
🧮 Step4. 実際の運用
担当 操作 使用ツール
社員 スマホでフォーム入力 Googleフォーム
スクリプト ID→氏名補完 Google Apps Script
事務担当 ボタン1つ押す Excel VBA
結果:
月末にボタン1回で、全社員分の勤務表が自動完成。
🚀 効果
項目 Before After
入力 紙・Excel手入力 スマホ入力
転記 手作業 自動転記
集計 丸2日 数分
導入コスト 数十万円 無料(GAS+VBA)
🔒 セキュリティと運用
入力(クラウド)と集計(ローカル)を分離
社員名をキーにローカルファイルへ安全に転記
社内サーバー運用でも問題なし
🧠 まとめ
Excelフォーマットを変えずにDX化
現場に負担をかけない仕組み
無料ツールだけで構築可能
DXとは「ツールを変えること」ではなく、
“人の手間を減らすこと”だと実感しました。
✍️ 執筆:へたれ
プロジェクトエンジニア/システム責任者
「現場を知る人が作るDX」をテーマに発信中。