Excel VBAで在庫CSV更新を自動化|既存マクロ改修・予約販売対応の開発事例
- yuji fukami
- 7月2日
- 読了時間: 7分

ECサイトや卸販売サイトを運用していると、販売チャネルごとに異なるCSV形式へ在庫情報を反映する作業が発生します。在庫数、商品コード、出荷予定日、予約販売の設定などを手作業で編集していると、入力ミスやファイルの取り違えが起きやすくなります。
今回は、既存のExcelマクロ在庫更新ツールをもとに、販売チャネル別の在庫CSV更新へ対応できるよう改修した事例をご紹介します。実データや顧客情報は伏せ、処理内容は匿名化した形で紹介します。
上の図は、元在庫表を基準に、販売チャネルごとのCSVへ在庫数・出荷予定情報を反映する仕組みの全体像です。バックアップやエラーログも含め、実運用で安全に使えるように設計しています。
ご相談内容
既存のExcelマクロを使って在庫更新を行っていたものの、販売サイト側のCSV形式に合わせた更新が難しくなっているというご相談でした。特に、転記元の在庫表と転記先CSVで列構造が異なるため、従来のツールでは対応しきれない状態でした。
ご相談を整理すると、必要とされていたのはおおむね次のような内容でした。
新しいCSV形式や、追加された販売チャネルにも対応したい
在庫数を商品コードで照合して、正しい商品へ反映したい
商品ごとに係数を掛けて在庫数を計算する必要がある
予約販売や入荷予定にも対応したい
手作業ではミスが起きやすいので、処理を自動化したい
在庫数の反映だけでなく、商品ごとの係数計算、エラーチェック、バックアップ保存、予約販売用の出荷予定情報の反映なども含めて、業務全体を安全に回せる形にすることが求められていました。
業務上の課題:販売チャネルごとにCSV形式が異なり、手作業ではミスが起きやすい
この種の業務では、元データとCSVの出所を一般的な流れで整理すると分かりやすくなります。元データは、社内で管理している在庫表や、仕入・物流・販売管理の流れで使用される在庫データを想定しています。一方、転記先CSVは、販売サイトや卸販売サイトへ取り込むための在庫データとして使用されます。つまり、社内側の在庫情報を、販売チャネル側で利用できる形式に整えることが、このツールの役割です。
ここで問題になるのが、ファイルごとの形式の違いです。
元在庫表と転記先CSVで列構造が異なる
商品コード、在庫数、出荷予定日の位置がファイルごとに違う
CSVを手作業で開いて編集すると、文字化けや保存形式の問題も起きやすい
古いファイルを更新してしまう、どのファイルを使ったか分からなくなる
マイナス在庫、予約販売、入荷予定など、単純な在庫更新では処理しきれない条件がある
同じ在庫情報であっても、販売チャネルごとに整形・転記する必要があり、手作業では商品コードの照合ミスや在庫数の入力ミスが起きやすい状況でした。
構築した仕組み:元在庫表と販売サイト用CSVを照合・更新するツール
そこで、商品コードをキーにして元在庫表と転記先CSVを照合し、在庫数や出荷予定情報を自動で反映できる仕組みを構築しました。処理の流れは次の通りです。
元在庫表
↓ 商品コードで照合
Excel VBA更新ツール
↓ 在庫数・出荷予定日・予約販売情報を整形
販売チャネルA用CSV / 販売チャネルB用CSV
↓
バックアップ保存・エラーログ出力Excel上の操作画面から、元在庫表と転記先CSVを選択して処理を実行します。商品コードをキーに両者を照合し、一致した商品の在庫数を更新します。その際、マイナス在庫は0として扱うなど、業務ルールに沿った変換を行い、商品ごとの係数マスタを参照して在庫数を計算します。処理が終わると、結果とエラー内容が確認できる形で出力されます。
下の図は、設定内容に基づいて在庫数がどのように更新されるかを、読込・照合から計算ロジック、書き戻し、エラーログまで順に示したものです。

ポイントは、単純なコピーではなく、商品コードをキーに照合したうえで、販売チャネルごとに必要な列へ反映している点です。これにより、列構成が異なるCSVでも、同じ元在庫表から安全に更新できます。
列設定を変更できる設計:列番号を固定せず、設定シートで変更できる
既存マクロにありがちな課題として、特定の列番号がプログラム内に直接書かれている、というものがあります。この場合、CSVの列構成が少し変わっただけでも、プログラムの修正が必要になってしまいます。
販売サイトのCSV仕様は、運用中に列構成や項目名が変わる可能性があります。そこで今回は、商品コード列、在庫数列、出荷予定日列などをプログラムに固定せず、設定シートから変更できるようにしました。
商品コード列、在庫数列、出荷予定日列などを画面上で指定できる
販売チャネルごとに列構成が異なっても対応しやすい
軽微なCSV仕様変更であれば、プログラムを修正せず現場側で対応しやすい
将来的なCSV仕様変更にも備えた設計にすることで、改修のたびに開発へ依頼する負担を減らすことを狙っています。
バックアップ・エラーログによる安全運用
業務データを更新するツールでは、処理でつまずいた場合に元へ戻せることが重要です。そこで、更新前後の安全性を高める仕組みを組み込みました。
更新前のCSVを自動バックアップ
必要に応じて元在庫表側もバックアップ
処理に使ったファイルを後から確認しやすくした
転記元のみに存在する商品コード、転記先のみに存在する商品コードを検出
重複データや、係数マスタに存在しない商品コードを検出
検出した内容をエラーログとして一覧化
これらにより、担当者がCSVを手作業で編集する必要が減り、商品コードの照合ミスや在庫数の入力ミスを防ぎやすくなります。また、処理前のバックアップやエラーログを残すことで、万が一の確認・復旧もしやすくなります。
予約販売・入荷予定への追加対応
納品後、実運用の中で追加のご要望をいただき、通常の在庫更新だけでなく、入荷予定がある商品の予約販売にも対応しました。
具体的には、入荷予定がある商品について、出荷可能日や予約販売用の在庫数を販売チャネル別のデータへ反映する処理を追加しています。商品名の先頭に出荷可能日を付与するなど、販売画面側で必要になる情報を自動で整形し、在庫がプラスに戻った場合は予約販売用の表示を外すといった、運用に合わせた処理も加えました。
複数チャネルで処理内容が異なるため、チャネルごとに処理を分けて実装しています。これにより、在庫が一時的に不足している商品でも、入荷予定をもとに販売設定を行いやすくなり、販売機会を逃しにくい運用につながります。
開発時に意識したこと:実装前に図解で仕様を整理
業務ツールでは、実装力だけでなく、仕様を正しく整理することが重要だと考えています。今回も、依頼内容だけでは仕様が曖昧な部分があったため、実際のファイル構造を見ながら処理の流れを整理し、赤枠・矢印・吹き出しなどを使った確認資料を作成しました。
どのファイルを変更するのか
どの列に書き込むのか
バックアップの対象はどこまでか
こうした点を事前にすり合わせ、認識違いを防いでから開発に入ることで、手戻りを抑えるようにしています。
このツールが役立つ場面
今回のような在庫管理・CSV更新業務は、次のような場面で活用できます。
ECサイトと卸販売サイトの在庫データをまとめて更新したい
仕入先・物流側から届く在庫表をもとに、販売サイト用CSVを作りたい
複数販売チャネルのCSVフォーマットが違っていて手作業が多い
入荷予定日をもとに予約販売の設定をしたい
商品コードをキーにして在庫数を安全に反映したい
更新前のファイルを自動バックアップしたい
手作業によるCSV編集ミスを減らしたい
既存マクロを今の業務に合わせて作り直したい
導入による効果
手作業を減らすだけでなく、更新ミスや運用面の不安を軽減できる点が、このツールの効果です。
CSV編集作業の時間短縮
商品コード照合ミス、在庫数入力ミスの削減
ファイルの取り違え防止
バックアップによる復旧性の向上
エラーログによる確認作業の効率化
仕様変更時の改修負担の軽減
追加機能にも対応しやすい構成
現場担当者がボタン操作で処理を進められる
派手な機能ではありませんが、こうした積み重ねが、日々の在庫更新を安定して回すことにつながります。
まとめ
今回の事例では、既存のExcelマクロをもとに、販売チャネル別の在庫CSV更新に対応した業務ツールへ改修しました。在庫数の自動更新だけでなく、列設定、係数マスタ、バックアップ、エラーログ、予約販売対応まで含めることで、実運用に合わせた仕組みとして整えています。
Excel VBAは、すでにExcelやCSVで業務を回している現場にとって、既存の運用を大きく変えずに自動化しやすい選択肢です。在庫更新、CSV変換、販売サイト向けデータ作成などでお困りの場合は、現在のファイル構成を確認したうえで、業務に合わせた自動化をご提案できます。



