【業務改善】QRコード × Googleスプレッドシートで行う「リアルタイム資材管理システム」

【業務改善】QRコード × Googleスプレッドシートで行う「リアルタイム資材管理システム」

本ガイドでは、Googleフォーム、Googleスプレッドシート、そしてGAS(Google Apps Script)を組み合わせ、外部システムに毎月の固定費を払うことなく、完全ローコードで動く「リアルタイム資材・備品管理システム」を15分で構築する方法をステップバイステップで解説します。

先日公開した 「Googleで作るクリニックの混雑状況可視化システム(スプレッドシート×GAS)」の記事 と同じく、Googleドライブ上でお手軽かつ完璧に動作する、実務の「かゆいところに手が届く」ソリューション設計となっています。


🛠️ システムの全体像

現場に貼られた機材の「TextInQR」コードをスマートフォンで読み取るだけで、ログイン不要のフォームが起動。担当者名とステータス(持出/返却)を送信すると、裏側でGASが自動起動し、「現在貸出中の資材リスト」や「現在の資材ステータス(誰が持っているか)」をダッシュボードシートに瞬時に自動反映させます。

🛠️ システム構築の3ステップ

STEP 1:Googleフォームとデータベース用スプレッドシートを用意する

貸出や返却のアクションを、現場で1タップで報告できる入力用の窓口を作ります。

  1. Googleフォーム を新規作成し、以下の質問を設計します。
    • 質問1: 「資材ID」(記述式 / 必須)
    • 質問2: 「ステータス」(ラジオボタン形式で 持出 / 返却 の2つを必須設定)
    • 質問3: 「担当者名」(記述式 / 必須)
  2. フォーム編集画面の「回答」タブから、「スプレッドシートにリンク」をクリックして新規スプレッドシート(データベース)を作成します。
  3. スプレッドシート内に、新しく マスタ台帳 という名前 of シートを作り、管理する資材一覧を作成しておきます。
    例:A列に「資材ID」、B列に「現在のステータス」、C列に「最新の使用者」、D列に「最終アクション日時」という見出しを作成します。

STEP 2:Google Apps Script (GAS) を仕込み、自動処理ロジックを実装する

フォームに回答が届いた際、裏側でマスタ台帳シートを1秒で書き換える自動システムを実装します。クリニック混雑状況システムで用いたGASと同じ仕組みです。

  1. スプレッドシートのメニューバーから、[拡張機能] ➔ [Apps Script] を選択します。
  2. エディタ内に最初からあるコードをすべて消去し、以下の会員限定コピペ用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);
  }
}
  1. エディタ上部の「保存(フロッピーディスクのアイコン)」を押します。
  2. 左メニューの「トリガー(目覚まし時計のアイコン)」をクリックし、右下の「トリガーを追加」を押します。
    • 実行する関数:onFormSubmitTrigger
    • イベントのソース:スプレッドシートから
    • イベントの種類:フォーム送信時
    設定後、「保存」を押し、Googleアカウントのアクセス承認を許可します。

STEP 3:TextInQRで資材固有の「自動入力URL」を生成して現場に貼る

現場のメンバーがログイン不要で、一瞬で報告を完了できるように、各資材に応じた個別URLを生成します。

  1. Googleフォーム編集画面の右上メニューから「事前入力したリンクを取得」を選択します。
  2. 「資材ID」欄に、一時的な文字列として 資材ID と入力し、下部の「リンクを取得」を押してURLをコピーします。
    例: https://docs.google.com/forms/d/.../viewform?entry.2001928=資材ID
  3. ポータル左側の **「TextInQR」** ジェネレーターに移動します。
  4. 「QRコードの内容」に、コピーしたURLの「資材ID」部分を対象の番号(例:A-001)に書き換えて入力します。
  5. 中央のデザインモードに「文字(2行)」を選び、**「資材管理」「A-001」** と入力。お好みのブランドカラー(ドットや目、白板色など)に美しくカスタマイズして、シール用紙印刷に最適な **「SVG保存」** を行います。