当サイトではアフィリエイトプログラムを利用して商品を紹介しています。掲載リンクからご購入いただいた場合、当サイトに報酬が発生することがあります。

在庫差異を減らす仕組み|棚卸しの精度ではなく、日々の記録と差異の理由を直す

在庫の数が、システムと現物で合わない。棚卸しのたびに差異が出て、原因を探すうちに時間が過ぎる。そして次の棚卸しでも、また同じくらいの差異が出る。

この状態を、棚卸しの精度を上げることで解決しようとすると、たいてい行き詰まります。差異が生まれているのは棚卸しの瞬間ではなく、日々の出し入れの記録だからです。この記事では、差異の原因を種類別に分けて記録する仕組みと、棚卸しを年1回の大仕事から日々の点検に変える設計を説明します。

この記事でわかること

  • 在庫差異が棚卸しではなく日々の記録で生まれている構造と、原因の5分類
  • 現場の入力を最小にして記録を続けさせる設計。棚卸しを日々の点検に変える循環棚卸しの回し方
  • 差異を責めない前提の作り方と、記録の残し方についての注意

ムダの現状:差異の原因が分からないまま調整している

棚卸しの作業を分解すると、時間の使われ方がはっきりします。

数える作業そのものは、人数をかければ終わります。時間を食うのは、その後です。システムの数と現物の数が合わない品目を洗い出し、伝票を遡り、担当者に聞き、それでも分からなければ「棚卸調整」として数を合わせる。この調整で終わらせた品目は、次回も同じように差異を出します。

差異の原因は、5つに分かれる

原因を分けずに扱っている限り、対策が打てません。実際に起きる差異は、次の5種類です。

原因 起きる場面 対策の方向
記録の漏れ 急ぎで出して、後で入れ忘れる 入力を軽くする
記録の誤り 品番違い、桁の間違い 選択式にする
タイミングのずれ 出荷済みだが計上は翌日 締めの時刻を決める
物理的な減耗 破損、劣化、こぼれ 記録する場を作る
置き場所の問題 別の棚にあって数え漏れ 置き場所を固定する

この5つは、対策がまったく違います。記録の漏れに対して棚卸しの回数を増やしても、何も解決しません。差異が出るたびに原因を分類して記録することが、対策の出発点になります。

機械に渡せる部分と、人に残す部分

工程 中身 誰がやるか
出し入れの記録 品番と数量を残す 人。ただし10秒以内
理論在庫の計算 入出庫を積み上げる 機械
数える対象の選定 今週どの品目を数えるか 機械
現物を数える 実際の数を確認する 人
差異の原因の判定 5種類のどれかを選ぶ 人。選ぶだけ

3番目の「数える対象の選定」を機械に渡すのが、この記事の中心です。全品目を年1回数えるのをやめ、動きの多い品目を毎週数える形に変えます。

スキームの全体図:入力を減らし、差異に理由をつける

1. 出し入れの入力を10秒にする 品番は選択式か読み取り。数量だけ入れる 入力が重いと、記録されなくなる 2. 理論在庫を自動で持つ 入出庫を積み上げるだけ 在庫表を手で更新しない 3. 今週数える品目を機械が出す 動きが多い品目ほど、頻度を上げる 全品目を年1回ではなく、毎週少しずつ 1回あたり15分で終わる量にする 4. 差異には必ず理由をつける 記録漏れ・記録誤り・タイミング 減耗・置き場所の5つから選ぶ 調整して終わりにしない この設計の狙い ・差異が出る前に、記録される状態を作る ・差異が出たら、原因が積み上がる状態を作る 棚卸しの精度ではなく、日々の記録を直す

必要なツールと費用(2026年9月23日時点)

必要なもの 用途 費用の考え方
入力フォーム 出し入れの記録 既存の契約の範囲
スプレッドシート 理論在庫と差異の記録 追加費用なし
Apps Script 在庫の計算と対象の選定 追加費用なし
現場の端末 入力と数えるときの確認 置き場所ごとに共用で1台

在庫管理の専用システムを検討する前に、この4つで3か月回してみてください。差異の原因が5分類のどこに集中しているかが分かると、どんなシステムが必要かも決まります。先にシステムを入れると、この判断材料が得られません。

導入手順:動きの多い品目から始める

Step 1:品目を、動きの多さで3段階に分ける

全品目を同じように扱わないでください。棚卸しの頻度を変えるために、まず分類します。

過去6か月の出庫の記録を集め、品目ごとに出庫の回数を数えます。回数の多い順に並べ、累計で全体の7割に届くところまでをA、次の2割をB、残りをCとします。金額ではなく出庫の回数で分けるのが要点です。動きが多いほど、記録の機会が多く、差異も生まれやすいからです。

区分 性質 数える頻度
A 出庫回数が多い。差異が出やすい 毎月
B 中程度 3か月に1回
C ほとんど動かない 年1回

Cの中に、1年以上まったく動いていない品目が見つかることがあります。これは棚卸しの話とは別に、持ち続けるかどうかを判断する対象です。数えるたびに時間を使っている在庫が、実は何年も使われていない、ということが起きます。

置き場所を固定すると、原因が1つ減る

分類する作業と同時に、置き場所の見直しもしておいてください。5つの原因のうち「置き場所の問題」は、定位置を決めるだけで消せます。

やることは単純です。Aに分類した品目について、置き場所を1か所に固定し、表示を付ける。Aだけで構いません。全品目の定位置を決めようとすると、それ自体が数か月の作業になります。

そして、置き場所を品目の表に列として持ってください。数えるときに探す時間がなくなり、1回15分という目標が現実的になります。置き場所が分からない品目を探す時間が、循環棚卸しでは毎回の負担になります。

Step 2:出し入れの入力を、10秒に収める

記録の漏れは、入力が重いことから生まれます。急いでいるときに30秒かかる入力は、後でやろうと思われて、そのまま忘れられます。

目標は10秒です。そのために、入力させるのは2つだけにします。品番と数量。日時、入力者、置き場所は自動で入るようにしてください。

品番は手入力させないでください。よく出る品目を並べたボタンか、読み取りで入れます。品番の手入力は、記録の誤りの最大の原因です。桁の打ち間違い、似た品番の取り違え。選択式にすれば、この種類の差異はほぼ消えます。

Step 3:理論在庫と、今週の対象を計算する

次のApps Scriptは、入出庫の記録から理論在庫を計算し、今週数えるべき品目を出します。

var CYCLE = { 'A': 30, 'B': 90, 'C': 365 };
var WEEKLY_LIMIT = 15;
function buildCountList() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var stock = calcStock(ss);
  var items = ss.getSheetByName('品目').getDataRange().getValues().slice(1);
  var today = new Date();
  var due = [];
  for (var i = 0; i < items.length; i++) {
    var code = items[i][0], name = items[i][1], rank = items[i][2];
    var last = items[i][3];
    var span = CYCLE[rank];
    if (!span) continue;
    var days = last ? Math.floor((today - new Date(last)) / 86400000) : 9999;
    if (days < span) continue;
    due.push({ code: code, name: name, rank: rank, days: days,
               theory: stock[code] || 0 });
  }
  due.sort(function (a, b) { return (b.days - CYCLE[b.rank]) - (a.days - CYCLE[a.rank]); });
  var out = [];
  for (var j = 0; j < due.length; j++) {
    if (j >= WEEKLY_LIMIT) break;
    out.push([due[j].code, due[j].name, due[j].rank, due[j].theory, '', '', '']);
  }
  write(ss, out);
}
function calcStock(ss) {
  var m = {};
  var v = ss.getSheetByName('入出庫').getDataRange().getValues().slice(1);
  for (var i = 0; i < v.length; i++) {
    var code = v[i][1];
    var qty = Number(v[i][2] || 0);
    var kind = v[i][3];
    if (!code) continue;
    if (!m[code]) m[code] = 0;
    if (kind === '入庫') m[code] += qty;
    if (kind === '出庫') m[code] -= qty;
    if (kind === '調整') m[code] = qty;
  }
  return m;
}
function write(ss, out) {
  var sh = ss.getSheetByName('今週数える');
  sh.getRange(2, 1, Math.max(sh.getLastRow() - 1, 1), 7).clearContent();
  if (out.length === 0) return;
  sh.getRange(2, 1, out.length, 7).setValues(out);
}

実装で押さえている点を3つ挙げます。

1つ目、1回あたりの件数に上限を設けていること。上のコードでは15件です。1回15分で終わる量にしないと、毎週の作業として続きません。件数は自社の品目の数え方に合わせて調整してください。

2つ目、期限を超えた日数が大きいものから並べていること。単に期限を過ぎたものを順に出すと、いつまでも後回しになる品目が生まれます。

3つ目、出力する列に理論在庫を含めていること。数える人に理論値を見せるかどうかは判断が分かれますが、見せない運用のほうが差異を正しく拾えます。その場合は、この列を隠した状態で現場に渡してください。

Step 4:差異には、必ず理由をつける

数えた結果が理論在庫と違ったとき、調整して終わりにしないでください。5分類のどれかを選ぶ欄を必ず埋めます。

選ぶだけにするのが要点です。文章を書かせると記録されません。記録漏れ、記録誤り、タイミングのずれ、減耗、置き場所。この5つから選び、必要なら一言だけ添える形にします。

分からない場合は「原因不明」を選べるようにしてください。選択肢に「分からない」がないと、適当にどれかを選ばれます。それでは分類の意味がなくなります。原因不明が多いこと自体が、次の打ち手を示す情報になります。

締めの時刻を決めると、タイミングのずれが消える

5つの原因のうち「タイミングのずれ」は、締めの時刻を決めるだけで大きく減ります。

出荷は済んでいるが記録は翌朝、という運用だと、その日の夕方に数えた在庫は必ず合いません。何時までの出し入れをその日の分として扱うかを決めてください。17時、あるいは業務終了時。決めたら、数えるのはその時刻の後にします。

そして、数えた時刻も記録に残してください。差異が出たときに、締めの時刻をまたいでいなかったかを確認できます。この列がないと、タイミングのずれと記録漏れの区別がつきません。

Step 5:月に1回、原因の分布を見る

集まった分類を、月に1回集計してください。どの原因が多いかで、打つべき手が変わります。

記録漏れが多いなら、入力の手間を見直します。記録誤りが多いなら、品番の入れ方を選択式に変えます。タイミングのずれが多いなら、締めの時刻を決めます。減耗が多いなら、保管の方法か扱い方の問題です。置き場所が多いなら、定位置を決めます。

そして、原因不明の比率が下がっていくかを見てください。下がっていれば、現場が差異の原因に目を向けるようになっています。

最初の1か月は、A区分だけで回す

全区分を同時に始めないでください。仕組みが動くかどうかを確かめる期間が要ります。

最初の1か月は、A区分の品目だけで回します。入力が10秒で終わるか、毎週15分の棚卸しが続くか、差異の分類が選ばれるか。この3つが確認できてから、BとCを足します。

1か月やってみると、たいてい調整が必要な箇所が見つかります。よく出る品目がボタンの2画面目にあって選びにくい、置き場所の表示が現場の呼び方と違う、といった細かい問題です。これらはA区分だけの期間に直しておくほうが、全体に広げてから直すより手間がかかりません。

現場の合意の取り方:差異を責めない前提を作る

この仕組みの成否は、差異が正直に記録されるかどうかで決まります。

懸念 背景 答え方
差異を出すと怒られる これまで差異が責められてきた 差異の件数を個人別に出さないと決め、実際に出さない
数える回数が増える 毎週と聞いて負担を想像する 1回15分、年間の合計は年1回の全数より少ないと示す
記録が面倒 過去の入力が重かった 実際に10秒で終わることを、その場で試してもらう

年間の合計時間を、先に計算して見せる

毎週数えると聞くと、負担が増えるように感じます。実際には減ることが多いので、計算して見せてください。

年1回の全数棚卸しは、数える時間だけでなく、事前の準備、当日の人員の確保、そして差異の調査に時間がかかります。一方、循環棚卸しは1回15分を年間50回で、合計12時間半。準備も人員の確保も不要です。

この比較を数字で示すと、話が進みます。感覚で「増える」と思われている限り、協力は得られません。

差異の件数を、個人別に出さない

差異が個人の責任として扱われると、記録されなくなります。数が合わないと分かった時点で、こっそり調整されるようになる。

集計の軸を、品目別・置き場所別・原因別の3つに限ってください。担当者別の集計は作らない。口頭の約束ではなく、集計を作らない設計にすることで担保します。

そして、差異が出たときの扱いを先に明示してください。差異は原因を知るための情報であり、評価には使わない。この一文を、仕組みを始める説明で必ず伝えます。

失敗パターンと限界:棚卸資産の評価と記録

循環棚卸しと、決算のための棚卸しは別の話

循環棚卸しは、日々の在庫の精度を上げるための仕組みです。決算において棚卸資産をどう評価し、どのような手続きで数量を確定するかは、これとは別に考える必要があります。

自社の会計処理として循環棚卸しの結果をどう扱えるかは、顧問税理士や会計士に確認してください。この記事の仕組みは、日々の在庫を合わせるための実務であり、会計上の取扱いを示すものではありません。

調整の記録を、消さない

差異が出て在庫数を調整したとき、その記録を残してください。いつ、どの品目を、いくつ、どの原因で調整したか。

調整は、在庫の金額に影響します。後から「なぜこの数になっているのか」を説明できる状態にしておくことが必要です。上のコードでは、調整も入出庫と同じ表に記録する形にしています。在庫表の数字を直接書き換える設計にしないでください。履歴が残らなくなります。

この仕組みが向かない場合

品目が数十点しかなく、置き場所も1か所という規模では、循環棚卸しの効果は限定的です。この場合は、入力を軽くする部分だけを作り、棚卸しは従来どおりでも足ります。

逆に、ロットや消費期限の管理が必要な品目を扱っている場合は、この仕組みだけでは足りません。数量だけでなく、どのロットがいくつあるかを追う必要があるためです。まず数量の精度を上げてから、ロットの管理を足す順番を勧めます。

また、複数の拠点にまたがる在庫では、拠点間の移動という新しい原因が加わります。移動中の在庫をどちらの拠点で数えるかを先に決めておかないと、差異の原因が増えます。

AIを足すなら、発注の予測ではなく異常の検出に

在庫にAIを使うというと、需要予測や自動発注が思い浮かびます。ただ、その前に効く使い方があります。

入出庫の記録から、いつもと違う動きを検出する使い方です。普段は週に数回しか動かない品目が1日に何度も出ている、出庫の数量が過去の平均から大きく外れている。こうした異常は、記録の誤りか、実際に何かが起きているかのどちらかです。

需要予測は、記録の精度が上がってからの話です。差異が毎月出ている状態のデータで予測しても、その予測は差異を含んだものになります。順番は、記録を直す、異常を拾う、そして予測する。この順を飛ばすと、当たらない予測に振り回されます。

効果の測り方

数字 測り方 いつ見るか
差異が出た品目の割合 数えた品目のうち差異があった数 毎月
原因不明の比率 差異のうち原因不明を選んだ数 毎月
棚卸しにかけた時間 年間の合計時間 年1回

1つ目は、最初の数か月は下がりません。これまで年1回しか見ていなかった差異が、毎月見えるようになるだけだからです。3か月目以降、記録の漏れや誤りへの対策が効いてくると下がり始めます。

2つ目のほうが、早く動きます。原因不明の比率は、現場が差異の原因を考える習慣がつくにつれて下がります。ここが半年たっても高いままなら、分類の選択肢が実態と合っていない可能性があります。

まとめ

在庫差異は、棚卸しの瞬間ではなく日々の出し入れの記録で生まれています。だから、棚卸しの精度を上げても解決しません。

やることは2つです。1つは、出し入れの入力を10秒に収めること。入力させるのは品番と数量だけにし、品番は選択式か読み取りにする。記録漏れと記録誤りの大半は、ここで消えます。もう1つは、差異が出たときに必ず原因を5分類から選ばせること。調整して終わりにしない。

そして、棚卸しを年1回の全数から循環棚卸しに変えます。出庫の回数で品目をA・B・Cに分け、Aは毎月、Bは3か月、Cは年1回。1回あたり15分で終わる件数に上限を設ける。年間の合計時間は、全数棚卸しより少なくなります。

合意は、差異を個人の責任にしない前提を作ることで取ります。集計の軸を品目別・置き場所別・原因別に限り、担当者別は作らない。設計としてそうしておくことで、正直な記録が続きます。

よくある質問

ABCの分類は、金額で分けるのが一般的ではないですか

金額で分ける考え方もありますが、差異を減らすことが目的なら出庫の回数で分けてください。差異は記録の機会に比例して生まれるため、動きが多い品目ほど数える頻度を上げる必要があります。金額での分類は、在庫の金額を管理する別の目的に向いています。

数える人に理論在庫を見せるべきですか

見せない運用のほうが、差異を正しく拾えます。理論値が見えていると、それに近い数を報告してしまう傾向があるためです。ただし、明らかに桁が違う場合に気づけないという面もあります。見せない設定で始めて、数え間違いが多いようなら見直してください。

差異が出ても、調整すれば数は合います。原因を記録する意味はありますか

調整だけで終わらせると、次回も同じ差異が出ます。原因を分類して積み上げると、どこに手を打てばよいかが見えます。記録漏れが多いのか、置き場所の問題なのか。対策がまったく違うので、分けずに扱っている限り減りません。

1回15分という上限は、どう決めればよいですか

実際に数えてみて決めてください。品目によって数えやすさが違います。まず10件で試して所要時間を測り、15分に収まる件数に調整します。重要なのは、毎週の作業として無理なく続く量にすることです。長くすると、忙しい週に飛ばされます。

1年以上動いていない品目が見つかりました

棚卸しとは別の判断が必要な対象です。なぜ動いていないのか、今後使う見込みがあるのか、保管の場所を占めていないか。持ち続けるかどうかの判断は、在庫の金額や税務上の取扱いにも関わるため、必要に応じて顧問税理士に相談してください。

複数の倉庫がある場合は、どうすればよいですか

拠点間の移動という原因が加わるため、移動中の在庫をどちらの拠点で数えるかを先に決めてください。決めないまま始めると、差異の原因に「移動中だった」が大量に混ざり、他の原因が見えなくなります。まず1拠点で回してから広げる順番を勧めます。

同じ部門の記事

現場シフト作成を自動化する|条件を法令・店舗・配慮の3層に分け、配慮の調整だけを人が決める2026年10月1日
現場製造現場の紙の記録を電子化する|日報・点検・不良の3つから始め、入力は選択式と写真で30秒に収める2026年9月25日

部門ごとの自動化スキームを、1つずつ

営業・経理・人事総務・サポート・現場。部門ごとに、1つのムダを消す設計図と、現場の合意の取り方を書いています。

スキーム一覧を見る

同じ部門の記事だけを追うなら、現場の記事一覧からたどれます。

上部へスクロール