0
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?

💼 【無料で実現】Googleフォーム × GAS × VBAで作る

Posted at

🧩 はじめに

「勤怠管理を自動化したいけど、現場ではまだ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」をテーマに発信中。

0
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
0
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?