【業務改善】QRコード × Googleスプレッドシートで行う「リアルタイム資材管理システム」
本ガイドでは、Googleフォーム、Googleスプレッドシート、そしてGAS(Google Apps Script)を組み合わせ、外部システムに毎月の固定費を払うことなく、完全ローコードで動く「リアルタイム資材・備品管理システム」を15分で構築する方法をステップバイステップで解説します。
先日公開した 「Googleで作るクリニックの混雑状況可視化システム(スプレッドシート×GAS)」の記事 と同じく、Googleドライブ上でお手軽かつ完璧に動作する、実務の「かゆいところに手が届く」ソリューション設計となっています。
🛠️ システムの全体像
現場に貼られた機材の「TextInQR」コードをスマートフォンで読み取るだけで、ログイン不要のフォームが起動。担当者名とステータス(持出/返却)を送信すると、裏側でGASが自動起動し、「現在貸出中の資材リスト」や「現在の資材ステータス(誰が持っているか)」をダッシュボードシートに瞬時に自動反映させます。
🛠️ システム構築の3ステップ
STEP 1:Googleフォームとデータベース用スプレッドシートを用意する
貸出や返却のアクションを、現場で1タップで報告できる入力用の窓口を作ります。
- Googleフォーム を新規作成し、以下の質問を設計します。
- 質問1: 「資材ID」(記述式 / 必須)
- 質問2: 「ステータス」(ラジオボタン形式で
持出/返却の2つを必須設定) - 質問3: 「担当者名」(記述式 / 必須)
- フォーム編集画面の「回答」タブから、「スプレッドシートにリンク」をクリックして新規スプレッドシート(データベース)を作成します。
-
スプレッドシート内に、新しく
マスタ台帳という名前 of シートを作り、管理する資材一覧を作成しておきます。
例:A列に「資材ID」、B列に「現在のステータス」、C列に「最新の使用者」、D列に「最終アクション日時」という見出しを作成します。
STEP 2:Google Apps Script (GAS) を仕込み、自動処理ロジックを実装する
フォームに回答が届いた際、裏側でマスタ台帳シートを1秒で書き換える自動システムを実装します。クリニック混雑状況システムで用いたGASと同じ仕組みです。
- スプレッドシートのメニューバーから、[拡張機能] ➔ [Apps Script] を選択します。
- エディタ内に最初からあるコードをすべて消去し、以下の会員限定コピペ用GASコードをそのまま貼り付けます。
// フォーム送信時に自動で起動し、マスタの資材状況をリアルタイム更新するスクリプト
function onFormSubmitTrigger(e) {
try {
const sheet = SpreadsheetApp.getActiveSpreadsheet();
const responseSheet = sheet.getSheetByName("フォームの回答 1");
const masterSheet = sheet.getSheetByName("マスタ台帳");
// 1. 最新の送信内容を取得する
const lastRow = responseSheet.getLastRow();
const data = responseSheet.getRange(lastRow, 2, 1, 3).getValues()[0]; // B〜D列の[資材ID, ステータス, 担当者]
const itemId = String(data[0]).trim();
const status = String(data[1]).trim();
const userName = String(data[2]).trim();
const timestamp = new Date(); // 送信時刻
if (!itemId) return;
// 2. マスタ台帳から、該当する資材IDの行を探す
const masterData = masterSheet.getDataRange().getValues();
let targetRow = -1;
for (let i = 1; i < masterData.length; i++) {
if (String(masterData[i][0]).trim() === itemId) {
targetRow = i + 1; // スプレッドシートの行番号(1始まり)
break;
}
}
// 3. マスタ台帳に資材IDが存在すれば書き換える
if (targetRow !== -1) {
// B列に最新ステータス、C列に最終使用者、D列に最終アクション日時を瞬時に書き込み
masterSheet.getRange(targetRow, 2).setValue(status === "持出" ? "貸出中" : "保管中");
masterSheet.getRange(targetRow, 3).setValue(status === "持出" ? userName : "");
masterSheet.getRange(targetRow, 4).setValue(timestamp);
}
} catch(error) {
console.error("エラーが発生しました: " + error.message);
}
}
- エディタ上部の「保存(フロッピーディスクのアイコン)」を押します。
- 左メニューの「トリガー(目覚まし時計のアイコン)」をクリックし、右下の「トリガーを追加」を押します。
- 実行する関数:
onFormSubmitTrigger - イベントのソース:
スプレッドシートから - イベントの種類:
フォーム送信時
- 実行する関数:
STEP 3:TextInQRで資材固有の「自動入力URL」を生成して現場に貼る
現場のメンバーがログイン不要で、一瞬で報告を完了できるように、各資材に応じた個別URLを生成します。
- Googleフォーム編集画面の右上メニューから「事前入力したリンクを取得」を選択します。
- 「資材ID」欄に、一時的な文字列として
資材IDと入力し、下部の「リンクを取得」を押してURLをコピーします。
例:https://docs.google.com/forms/d/.../viewform?entry.2001928=資材ID - ポータル左側の **「TextInQR」** ジェネレーターに移動します。
- 「QRコードの内容」に、コピーしたURLの「
資材ID」部分を対象の番号(例:A-001)に書き換えて入力します。 - 中央のデザインモードに「文字(2行)」を選び、**「資材管理」「A-001」** と入力。お好みのブランドカラー(ドットや目、白板色など)に美しくカスタマイズして、シール用紙印刷に最適な **「SVG保存」** を行います。