Googleスプレッドシート+GASで、専用ツールなしに在庫管理を自動化する実践的な手順を解説します。
在庫管理の手間を省きたいけれど、高価な専用システムは導入できない——そんな中小企業や個人事業主にとって、Googleスプレッドシートは強力な味方です。しかし、入力・集計を手動で行っていては本末転倒。GAS(Google Apps Script)を使えば、在庫の増減を自動追跡し、在庫不足アラートまで自動化できます。
この記事では「在庫マスタシート」「入出庫記録シート」「自動集計+アラート通知」の3点セットを、コピペで使えるGASコードとともに丁寧に解説します。初めてGASを触る方でも手順通りに進めれば1時間以内に完成できます。
この記事でできること
- スプレッドシートで在庫数をリアルタイムに自動集計する
- 入出庫があるたびに残数を自動更新する
- 在庫が設定した閾値を下回ったらメールで自動アラートを受け取る
- 月次在庫レポートをシートに自動生成する
事前準備
必要なものはGoogleアカウントのみです。以下のシート構成で新しいスプレッドシートを作成してください。
- 在庫マスタシート:列A=商品ID、列B=商品名、列C=現在庫数、列D=最低在庫数(アラート閾値)
- 入出庫記録シート:列A=日付、列B=商品ID、列C=区分(入庫/出庫)、列D=数量、列E=担当者
シートを作成したら、スプレッドシートのIDをメモしておきます(URLの /d/ と /edit の間の文字列)。
STEP1: 在庫マスタシートにサンプルデータを入力する
在庫マスタシートに以下のようなサンプルデータを入力して動作確認の準備をします。
商品ID | 商品名 | 現在庫数 | 最低在庫数
P001 | ボールペン(黒)| 50 | 20
P002 | コピー用紙A4 | 10 | 30
P003 | ホッチキス針 | 200 | 50
P002のコピー用紙は意図的に在庫数を最低在庫数以下にしています。アラートのテストに使います。
STEP2: GASエディタを開いてスクリプトを作成する
スプレッドシートのメニューから「拡張機能」→「Apps Script」を開きます。デフォルトの myFunction は削除し、以下のコードを貼り付けてください。
const SS_ID = 'YOUR_SPREADSHEET_ID'; // ここをスプレッドシートIDに変更
const ALERT_EMAIL = 'your-email@example.com'; // アラート送信先
function updateStock() {
const ss = SpreadsheetApp.openById(SS_ID);
const masterSheet = ss.getSheetByName('在庫マスタ');
const logSheet = ss.getSheetByName('入出庫記録');
const masterData = masterSheet.getDataRange().getValues();
const stockMap = {};
for (let i = 1; i < masterData.length; i++) {
stockMap[masterData[i][0]] = {
row: i + 1,
name: masterData[i][1],
stock: masterData[i][2],
minStock: masterData[i][3]
};
}
const logData = logSheet.getDataRange().getValues();
for (let i = 1; i < logData.length; i++) {
const [date, itemId, type, qty, person] = logData[i];
if (!itemId || logData[i][5] === '処理済') continue;
if (stockMap[itemId]) {
const delta = type === '入庫' ? Number(qty) : -Number(qty);
stockMap[itemId].stock += delta;
masterSheet.getRange(stockMap[itemId].row, 3).setValue(stockMap[itemId].stock);
logSheet.getRange(i + 1, 6).setValue('処理済');
}
}
checkLowStock(stockMap);
}
function checkLowStock(stockMap) {
const alerts = [];
for (const id in stockMap) {
const item = stockMap[id];
if (item.stock <= item.minStock) {
alerts.push('【' + item.name + '】残数: ' + item.stock + ' / 最低在庫: ' + item.minStock);
}
}
if (alerts.length > 0) {
const subject = '【在庫アラート】補充が必要な商品があります';
const body = alerts.join('\n') + '\n\n※このメールは自動送信されています';
MailApp.sendEmail(ALERT_EMAIL, subject, body);
}
}
STEP3: トリガーを設定して自動実行にする
GASエディタの左メニューから「トリガー」(時計アイコン)を開き、「トリガーを追加」をクリックします。設定は以下の通りです。
- 実行する関数: updateStock
- イベントのソース: 時間主導型
- 時間の種類: 時間ベースのタイマー → 1時間ごと(または任意の間隔)
これで1時間ごとに入出庫記録が自動集計され、在庫不足があれば即座にメール通知が届くようになります。
STEP4: 入出庫記録シートに記録するだけで在庫が動く
日々の運用は「入出庫記録」シートへの入力だけです。以下のフォーマットで行を追加するだけで、次のトリガー実行時に在庫マスタが自動更新されます。
日付 | 商品ID | 区分 | 数量 | 担当者
2025-04-10 | P001 | 出庫 | 10 | 山田
2025-04-10 | P002 | 入庫 | 100 | 鈴木
列Fに「処理済」と自動で記録されるので、重複処理の心配もありません。
STEP5: 月次レポートを自動生成する(応用)
以下の関数をスクリプトに追加し、月次トリガー(月1回)に設定すると、毎月1日に前月分の入出庫サマリーを新シートに自動生成できます。
function generateMonthlyReport() {
const ss = SpreadsheetApp.openById(SS_ID);
const logSheet = ss.getSheetByName('入出庫記録');
const now = new Date();
const lastMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1);
const reportName = '月次レポート_' + lastMonth.getFullYear() + String(lastMonth.getMonth()+1).padStart(2,'0');
const reportSheet = ss.insertSheet(reportName);
reportSheet.appendRow(['商品ID', '入庫合計', '出庫合計', '純増減']);
const logData = logSheet.getDataRange().getValues();
const summary = {};
for (let i = 1; i < logData.length; i++) {
const [date, itemId, type, qty] = logData[i];
if (!itemId) continue;
const d = new Date(date);
if (d.getMonth() !== lastMonth.getMonth() || d.getFullYear() !== lastMonth.getFullYear()) continue;
if (!summary[itemId]) summary[itemId] = { in: 0, out: 0 };
if (type === '入庫') summary[itemId].in += Number(qty);
else summary[itemId].out += Number(qty);
}
for (const id in summary) {
const { in: inQty, out: outQty } = summary[id];
reportSheet.appendRow([id, inQty, outQty, inQty - outQty]);
}
Logger.log('月次レポート「' + reportName + '」を生成しました');
}
うまくいかないときのチェックリスト
- スクリプト内の SS_ID が正しいスプレッドシートIDになっているか確認する
- シート名が「在庫マスタ」「入出庫記録」と完全一致しているか確認する(全角スペースや表記ゆれに注意)
- GASの実行権限でGmailの使用を許可しているか確認する(初回実行時に許可ダイアログが出る)
- 入出庫記録の「区分」列が「入庫」または「出庫」の全角表記になっているか確認する
- トリガーが正常に登録されているかGASのトリガー一覧画面で確認する
応用・発展
この仕組みをベースに、以下のような発展的な機能も追加できます。Googleフォームと連携すれば、スマートフォンからのバーコードスキャン入力にも対応可能です。また、Slackと連携して在庫アラートをチームチャンネルに通知する方法は別記事で詳しく解説しています。複数拠点の在庫管理が必要な場合は、シートをタブで拠点ごとに分け、集計関数で合算する方法が効果的です。さらにAppSheetと組み合わせると、スプレッドシートのデータをモバイルアプリのUIで操作できるようになり、現場スタッフでも直感的に入出庫入力ができます。
まとめ
- スプレッドシート+GASで、無料で本格的な在庫管理自動化が実現できる
- 入出庫記録シートへの入力だけで在庫マスタが自動更新される
- 在庫不足はメールで自動アラート通知されるため見落としゼロ
- 月次レポート自動生成で棚卸し作業も効率化できる
- Googleフォーム・Slack・AppSheetとの連携でさらに発展できる

コメントを残す