1つのシートならなんとかなる
中小製造業で「Excelでちゃんと管理してくれ」と言われたとき、まず作るのはだいたい1つのシートにまとめた一覧表になる。
在庫一覧、受注一覧、発注一覧。品番、数量、日付を並べて、フィルターで絞り込んで、SUMで合計を出す。これは特別なスキルがなくてもできるし、実際これだけで回る業務も多い。
問題はここから先。
「2つのデータをつなげる」瞬間に壁が来る
業務が進むと、1つのシートでは収まらない場面が出てくる。
- 発注したものが届いたかどうか確認したい → 発注データと入荷データを突合する必要がある
- 在庫から出荷した分を引きたい → 在庫データと出荷データをつなげる必要がある
- 見積もりと実際の原価を比べたい → 見積データと実績データを並べる必要がある
どれも「2つのデータを共通のキー(品番や注文番号)でつなげて、比較する」という同じ構造の問題になる。
ここでVLOOKUPやSUMIFSを使ってみる。品番をキーにして別シートから数字を引っ張ってくる。「入庫合計 − 出庫合計 = 現在の在庫数」をSUMIFSで出す。ここまではなんとかなる。
しかし、実際の業務ではこれだけでは足りなくなる。
関数でできるのは「今の状態を見る」こと
SUMIFSで「品番Aの入庫合計は300、出庫合計は200、だから在庫は100」と計算できる。これはある時点のスナップショットを見ているだけになる。
しかし、業務で必要なのはこういうことになる:
発注と入荷の消し込み。 発注番号PO-001で100個発注した。3月1日に60個届いた。残り40個がまだ届いていない。この「残り40個を追いかける」という作業は、発注レコードと入荷レコードを1件ずつ紐づけて、状態を管理する必要がある。SUMIFSで発注合計と入荷合計の差を出すことはできる。しかし「どの発注の、どの分が未入荷なのか」までは追えない。
在庫の引当。 在庫が200個ある。注文Aで80個、注文Bで150個の引き合いが来ている。合計230個で在庫が足りない。どちらを優先するか判断して、引き当てた分を在庫から確保する。これは「計算」ではなく「判断して状態を変える」作業になる。
出荷済みの消し込み。 受注リストから出荷が完了した案件を消し込む。出荷データと突合して、ステータスを「出荷済み」に変える。関数で「出荷データに存在する=出荷済み」と判定することはできるが、それを受注リストに反映して管理し続ける仕組みは関数だけでは作りにくい。
「見る」と「処理する」の境界
ここまでの例に共通しているのは、関数でできるのは 「見る」 ことであって、 「処理する」 ことではないという点になる。
- 見る: 今の在庫数を計算する、合計と合計の差を出す、条件に合うデータを探す
- 処理する: 発注に対して入荷を紐づける、在庫を引き当てる、ステータスを変更する
1つのシートで完結する業務は「見る」だけで回る。品番ごとの合計を出す、一覧を並べ替える、条件に合うものを抽出する。これは全部「見る」の範囲になる。
2つのデータをつなげる業務には「処理する」が入ってくる。AのデータとBのデータを照合して、結果に応じて状態を変える。この「状態を変える」部分が、関数にはできない。関数は与えられたデータから答えを計算するだけで、データそのものを書き換えることはしない。
1シートで止まるのは、能力の問題ではなく、関数という道具の限界になる。
この壁を超えるには
「処理する」をExcelの中でやろうとすると、VBA(マクロ)が必要になる。VBAなら、データを読んで、条件を判断して、別のシートに書き込む、という一連の処理を自動化できる。
以前の記事で、Excelでも業務の仕組みは作れると書いた。あの記事で言う「シートの役割を分離して、VBAで制御する」というやり方は、まさにこの「処理する」壁を超えるための方法になる。
ただし、VBAを書く前にやるべきことがある。データの持ち方を整えることになる。
発注データと入荷データを突合するには、両方に共通のキー(発注番号など)が入っている必要がある。在庫の入出庫を追いかけるには、入庫と出庫が同じ品番コードで記録されている必要がある。VBAで処理を書く以前に、つなげるためのデータの形が揃っていなければ、何も始まらない。
以前の記事で「Excelのデータはいつでもデータベースに移せる形で持つ」と書いた。あの「データの文法」の話は、実はこの壁を超えるための準備でもある。1行1レコード、列は固定、共通キーを持つ。この形になっていれば、VBAでもデータベースでも、次のステップに進める。
まず「何と何をつなげたいか」を整理する
VBAが書けなくても、今すぐできることがある。
「何と何をつなげたいか」を書き出すこと。
- 発注データと入荷データをつなげて、未入荷を把握したい
- 見積もりと実績原価をつなげて、ズレを見たい
- 受注データと出荷データをつなげて、未出荷を管理したい
つなげたいデータの組み合わせと、それぞれの共通キー(発注番号、見積番号、受注番号)を整理する。これだけで、今の業務のどこに「処理する」壁があるかが明確になる。
その上で、VBAを自分で覚えるか、できる人に相談するか、業者に頼むか。選択肢はいくつかあるが、何をつなげたいかが整理できていれば、どの選択肢を取っても話が早い。 逆に、ここが整理できていないまま「なんとかしてほしい」と頼むと、業者に頼んでもうまくいかない。以前の記事で「自分たちで理解できていないことは、正しく外注もできない」と書いた通りになる。
このシリーズの他の記事: