# AppSheetで在庫管理アプリを作る｜バーコード入力と在庫数の計算

AppSheetで在庫管理アプリを作るときの表の分け方、入出庫から在庫数を計算する式、スマホのカメラでバーコードを読む設定を解説します。バーコードに必要なプランや、電波の届かない倉庫で使うときの注意点も公式ヘルプで確かめて整理しました。

「在庫をスプレッドシートで管理しているけれど、倉庫でパソコンを開くのが面倒で、入力が後回しになる」という悩みは、AppSheetで解決できることがあります。

AppSheetなら、いま使っているGoogleのスプレッドシートをもとに、スマホで入出庫を記録するアプリを作れます。スマホのカメラでバーコードを読み取って入力することもできます。

この記事では、AppSheetの公式ヘルプで確かめた内容をもとに、在庫管理アプリの作り方と注意点を整理します。

<Points>

- 在庫数を直接書き換えるのではなく、「商品」と「入出庫の記録」に分けて在庫数を計算する
- スマホのカメラでバーコードやQRコードを読み取れるが、Core以上のプランが必要
- 電波の弱い倉庫でも使えるが、長い期間オフラインのままにしない

</Points>

## 在庫管理は「商品」と「入出庫」の2つの表に分ける

在庫管理アプリでよくある失敗は、商品の表に「在庫数」の列を作り、入荷や出荷のたびにその数字を書き換えるやり方です。誰がいつ何個動かしたのかが残らず、数字が合わなくなったときに原因を追えません。

おすすめは、表を2つに分ける作り方です。

<Figure title="在庫管理アプリの表の分け方">

| 表 | 1行が表すもの | 主な列 |
| --- | --- | --- |
| 商品 | 1つの商品 | 商品コード、商品名、バーコード、保管場所 |
| 入出庫 | 1回の入荷・出荷 | 日時、商品（商品の表を参照）、区分（入庫・出庫）、数量、担当者 |

</Figure>

在庫数は、入出庫の記録から「入庫の合計 − 出庫の合計」で計算して表示します。こうすると、記録が残るので数字が合わないときにさかのぼれます。

<Flow
  title="在庫数が決まる流れ"
  steps={[
    { label: "入出庫を記録", note: "スマホで1件ずつ入力" },
    { label: "入庫・出庫を合計", note: "商品ごとに集計" },
    { label: "在庫数を表示", note: "入庫 − 出庫" },
  ]}
/>

## 入出庫から在庫数を計算する式

AppSheetでは、表の列に式を設定して値を計算できます。公式ヘルプ「[SUM()](https://support.google.com/appsheet/answer/10107699?hl=ja)」（外部サイト）では、`SELECT()`で条件に合う行の値を集め、`SUM()`で合計する書き方と、`[_THISROW]`でいま表示している行の値を参照する書き方が紹介されています。

これを在庫管理に当てはめると、商品の表に追加する計算用の列（仮想列）に、次のような式を書けます。列名は自分のアプリに合わせて読み替えてください。

```
SUM(SELECT(入出庫[数量], AND([商品] = [_THISROW].[商品コード], [区分] = "入庫")))
- SUM(SELECT(入出庫[数量], AND([商品] = [_THISROW].[商品コード], [区分] = "出庫")))
```

<Note tone="info">

入出庫の記録が増えるほど、こうした集計の式は計算に時間がかかりやすくなります。古い年度の記録は別の表に移すなど、データを増やしすぎない工夫をしておきましょう。

</Note>

## スマホのカメラでバーコードを読む

公式ヘルプ「[Use a barcode scanner](https://support.google.com/appsheet/answer/10106618?hl=ja)」（外部サイト）によると、列の設定で「Scan（Scannable）」をオンにすると、その列にスマホのカメラで読み取った値を入力できます。

<Steps>
<Step title="バーコードを入れる列を選ぶ">

アプリエディタで入出庫の表を開き、商品を選ぶ列やバーコードの列を選びます。

</Step>
<Step title="「Scan」をオンにする">

列の一覧で「Scan」を有効にするか、列の編集画面の「Other Properties」で「Scannable」を有効にします。

</Step>
<Step title="検索でもスキャンできるようにする">

「Search（Searchable）」も有効にすると、画面上部の検索ボックスからもスキャンで商品を探せます。

</Step>
<Step title="実際のスマホで試す">

エディタの画面ではスキャンは動かないため、スマホにアプリを入れて試します。

</Step>
</Steps>

同じヘルプには、次の注意点が書かれています。

<Figure title="バーコード読み取りの主な条件" source="AppSheet ヘルプ「Use a barcode scanner」">

| 項目 | 内容 |
| --- | --- |
| 必要なプラン | CoreとEnterpriseのプランのみ対応 |
| 使える環境 | モバイル端末で動かしたアプリのみ。ブラウザではスキャンのボタンが出ない |
| 読める主な形式 | QRコード、EAN-13・EAN-8、UPC-A・UPC-E、Code 128、Code 39 など |
| 外付けのスキャナ | 列の種類をテキストにして入力する。カメラのスキャンとは同時に使えない |

</Figure>

## 電波の弱い倉庫で使うとき

倉庫の奥や地下では、電波が届きにくいことがあります。公式ヘルプ「[Offline and Sync: The Essentials](https://support.google.com/appsheet/answer/10107724?hl=ja)」（外部サイト）によると、AppSheetのアプリは端末にデータを保存しているため、オフラインでも使えます。入力した内容は端末にためておき、電波のある場所で同期したときに送られます。

<Compare>
<Column title="オフラインでもできること">

- 入出庫の記録の入力
- 端末に保存済みのデータの表示

</Column>
<Column title="気をつけること" tone="accent">

- 初めて使うときは必ず電波のある場所で起動する
- 何日も完全にオフラインのままにしない
- 画像をオフラインで見るには「Store content for offline use」の設定が必要

</Column>
</Compare>

ヘルプでは、長い期間オフラインのまま使うと、古い変更が後から送られてほかの人の変更を上書きするおそれがあると注意されています。複数の人が同じ商品の入出庫を記録する現場では、こまめに同期する運用にしておきましょう。

## まとめ

- 在庫数を直接書き換えず、「商品」と「入出庫」の表に分けて、入出庫の合計から在庫数を計算します。
- `SUM()`と`SELECT()`を組み合わせると、商品ごとの在庫数を自動で出せます。
- スマホのカメラでバーコードを読めますが、CoreかEnterpriseのプランが必要です。
- オフラインでも入力できますが、長い期間オフラインのままにせず、こまめに同期します。

在庫管理は、受注や仕入れ、会計のシステムとつながって初めて手間が減る業務でもあります。AppSheetの在庫アプリを他のシステムとつなぎたい、商品や記録が増えて動きが重くなってきたというときは、機能追加や専用アプリへの作り直しも含めて相談してみてください。

## よくある質問

### Q. 無料プランでもバーコードを読み取れますか？

公式ヘルプでは、バーコードのスキャンはCoreとEnterpriseのプランでのみサポートされると書かれています。Google Workspaceの契約によってはCoreのライセンスが含まれていることがあるので、まず自社の契約を確かめてください。

### Q. パソコンのブラウザでもバーコードを読めますか？

ヘルプによると、スキャンはモバイル端末で動かしたアプリでのみ使え、ブラウザで開いたアプリにはスキャンのボタンが表示されません。パソコンで読み取りたい場合は、キーボードのように入力する外付けのバーコードスキャナを使い、列の種類をテキストにします。

### Q. 在庫数がマイナスにならないようにできますか？

出庫の数量を入力するときに、在庫数を超えないかを確かめる入力チェックの設定を使う方法があります。ただし、複数の人が同時にオフラインで出庫を入力すると、同期のタイミングによってはチェックをすり抜けることがあります。厳密な在庫の引き当てが必要な場合は、専用の仕組みを検討してください。
