📋 概要
Tera計算2_3配送センタ規模計算.vbは、配送センター規模計算システムの核心となる計算エンジンです。 EIQ分析データを基に、配送センターに必要な各種スペース(入荷・保管・出荷作業・出荷)を算出し、 最適な施設規模を提案します。
🎯 主要機能
- 在庫物量計算: Iランク別の在庫日数・物量・保管スペース算出
- 入荷スペース計算: トラック仕様・荷姿・着床時間を考慮した入荷バース・スペース算出
- 出荷スペース計算: ピッキング方式・作業効率を考慮した出荷バース・スペース算出
- 出荷作業スペース計算: ピッキング・仕分け作業に必要なスペース算出
- 保管設備計算: ラック仕様・通路幅を考慮した保管平面積算出
- 建屋仕様・敷地計算: 建築面積・延床面積・敷地面積の算出
- 作業員数推定: 作業工程別の必要人員算出(追加機能)
⚠️ 重要な前提条件
本フォームは、Tera計算2_2データ作成.vbで生成された以下のテーブルが存在することを前提とします:
- T610_全出荷集計 - 全体出荷データ集計
- T612_全出荷日別集計 - 日別出荷データ集計
- T614_ケース出荷日別集計 - ケース出荷集計
- T615_バラ出荷日別集計 - バラ出荷集計
- T620_稼働時間日別集計 - 稼働時間集計
- TA10_ケースバラデータEIQ - EIQ統合テーブル
これらのテーブルが存在しない場合、計算は実行できません。
| 項目 | 内容 |
|---|---|
| ファイル名 | Tera計算2_3配送センタ規模計算.vb |
| フォームクラス名 | 配送センター規模計算_改5From |
| 総行数 | 7364行 (超大規模) |
| 言語 | Visual Basic .NET (Windows Forms) |
| 主要依存 | System.Data.OleDb、OfficeOpenXml、Tera計算k1.vb |
| 出力形式 | Excel (EPPlus) ワークブック生成 |
🎯 目的と役割
システム内での位置づけ
本フォームは、Tera計算2システムにおける第3段階(最終段階)に位置します:
- メニュー画面 - システム起動とワークフロー選択
- データ作成画面 - EIQ分析データの生成
- 規模計算画面(本フォーム) - 実際のスペース計算と結果出力
計算の全体像
「Tera計算」の哲学
本システムの名称「Tera計算」には、「物流施設を数値で語る」という思想が込められています。
- データドリブン: 感覚や経験則ではなく、実データに基づく科学的アプローチ
- トレーサビリティ: 計算根拠をすべて明示し、検証可能にする
- 多角的分析: EIQ分析により、複数の視点(出荷先・品目・数量)から施設を評価
- 最適化志向: 過剰でも過少でもない適正規模を追求
コード内のコメント「理由:frozen在庫を提案することは在庫に関する論議を呼び、Tera計算の趣旨に反する。」からも、 在庫論議を避け、施設スペース算出に専念する姿勢が読み取れます。
⚙️ 計算ワークフロー
自動計算モードと手動計算モード
⚠️ 自動計算が強制される理由
本システムは自動計算のみをサポートします。手動計算モードを選択しようとすると、 「変更入力値の反映ミスを防ぐため」というメッセージとともに、自動的に自動計算モードに戻されます。
これは、Tera設定(在庫日数、ラック仕様、作業効率など)を変更した際、 その影響が関連計算すべてに波及することを保証するための設計です。
全計算開始ボタン
「全計算開始」ボタンは、上記11個のサブプロシージャを順次実行し、 在庫計算から敷地計算までを一気通貫で処理します。
🔧 初期化処理
フォームロード処理
基礎データ読み込み
全データ集計
T610_全出荷集計から、出荷日数・出荷先数・アイテム数・行数・バラ数・ケース換算数・パレット換算数・容積換算数・重量換算数を取得し、 パブリック変数に格納します。これらの値は後続の全計算で参照されます。
出荷日ComboBox設定
データ作成フォームと同様に、出荷日の選択肢を生成します。 デフォルトは「全データ平均」で、これは日平均値を用いた計算を意味します。
📦 在庫物量計算
全在庫アイテム数設定
計算式
全在庫アイテム数 = 全出荷アイテム数 × (アイテム増分比率 / 100)
出荷無しアイテム数 = 全在庫アイテム数 - 全出荷アイテム数
意味
- 全出荷アイテム数: 実際に出荷実績のあるSKU数
- アイテム増分比率: 出荷実績のないデッドストック・取扱い終了品を考慮した増加率(100~150%推奨)
- 全在庫アイテム数: 実際に保管すべきSKU数
- 出荷無しアイテム数: 出荷実績はないが保管しているSKU数
Iランク別在庫日数設定
アイテムを出荷頻度・物量でA1/A2/B/C/Dの5段階にランク分けし、 各ランクに対して最大在庫日数・安全在庫日数・Frozen在庫日数を設定します。
| Iランク | 特性 | 推奨最大在庫日数 |
|---|---|---|
| A1 | 超高回転品(ABC分析上位10%) | 3~5日 |
| A2 | 高回転品(上位10~30%) | 5~7日 |
| B | 中回転品(上位30~60%) | 10~15日 |
| C | 低回転品(上位60~90%) | 20~30日 |
| D | 超低回転品・デッドストック予備軍(下位10%) | 30~60日 |
在庫物量推定
計算ロジック
- 変動しない在庫日数 = 安全在庫日数 + Frozen在庫日数
- 変動する在庫日数 = 最大在庫日数 - 変動しない在庫日数
- 安定運用時在庫日数 = 変動しない在庫日数 + (変動する在庫日数 / 2)
各Iランクの在庫物量
I_A1在庫物量 = I_A1日当たり出荷物量 × I_A1安定運用時在庫日数
同様に、I_A2、I_B、I_C、I_Dそれぞれについて在庫物量を算出します。
総在庫物量
全在庫物量 = I_A1在庫物量 + I_A2在庫物量 + I_B在庫物量 + I_C在庫物量 + I_D在庫物量
💡 「安定運用時在庫日数」の考え方
在庫は常に変動します。入荷直後は最大在庫日数に近く、出荷直前は安全在庫日数に近づきます。 安定運用時在庫日数は、この変動の中間値(変動幅の半分)を取ることで、 年間を通じた平均的な在庫水準を推定します。
これにより、過剰でも過少でもない現実的な保管スペースを算出できます。
在庫物量推定Dgv作成
算出された在庫物量は、DataGridViewに以下の形式で表示されます:
| 列名 | 内容 |
|---|---|
| Iランク | A1/A2/B/C/D |
| アイテム数 | 各ランクのSKU数 |
| 日当たり出荷物量 | ケース換算数/日 |
| 最大在庫日数 | 設定値 |
| 安定運用時在庫日数 | 計算値 |
| 推定在庫物量 | ケース換算数 |
| 推定在庫容積 | m³ |
🚛 入荷量・入荷スペース計算
入荷量計算の原理
基本原則
入荷量 = 在庫量 ÷ 在庫日数
在庫が一定期間で回転するという前提のもと、在庫を維持するために必要な日当たり入荷量を逆算します。
Iランク別入荷量
I_A1入荷量 = I_A1在庫物量 ÷ I_A1最大在庫日数
同様に、I_A2、I_B、I_C、I_Dについて算出
総入荷量
全入荷量 = I_A1入荷量 + I_A2入荷量 + I_B入荷量 + I_C入荷量 + I_D入荷量
入荷荷姿決定
入荷物量を、実際の荷姿(パレット・カゴ車・段ボール)に変換します:
平均ケース値計算
入荷荷姿換算
| 荷姿 | 換算式 |
|---|---|
| パレット数 | 入荷量(ケース) ÷ PL_平均ケ数 |
| カゴ車数 | 入荷量(ケース) ÷ カゴ車積載ケース数(設定値) |
| 段ボール数 | バラ出荷物量に対応する段ボール数 |
入荷トラック仕様と着床時間
入荷スペース算出には、トラック仕様(4t・10t)と着床時間が重要です:
| トラック型 | 積載容積 | 推奨着床時間 |
|---|---|---|
| 4tトラック | 約30m³ | 30~45分 |
| 10tトラック | 約60m³ | 60~90分 |
入荷バース数・スペース計算
入荷バース数
入荷バース数 = (入荷トラック台数 × 着床時間) ÷ 入荷作業時間
小数点以下切り上げ
入荷スペース
1バースあたり入荷スペース = トラック寸法 + 荷卸しスペース + 通路幅
一般的には、1バースあたり100~150m²
総入荷スペース = 入荷バース数 × 1バースあたりスペース
⚠️ ピーク時対応
入荷はピークが発生しやすい作業です。月初・週初に集中する傾向があるため、 平均値だけでなくピーク時の入荷量も考慮することが推奨されます。
本システムでは、ピーク物量比を設定し、ピーク時の入荷バース数も算出可能です。
📤 出荷スペース計算
出荷物量の形態別分類
出荷物量は、T614_ケース出荷日別集計とT615_バラ出荷日別集計から取得し、 以下の出荷形態に分類されます:
| 出荷形態 | 内容 | スペース特性 |
|---|---|---|
| コンテナ出荷 | ケース単位、パレット積載 | 効率的、積み上げ可能 |
| 段ボール出荷 | バラ単位、段ボール梱包 | スペース効率低、仕分けスペース必要 |
出荷コンテナ数・段ボール数計算
出荷バース数・スペース計算
出荷バース数
出荷バース数 = (出荷トラック台数 × 積込時間) ÷ 出荷作業時間
小数点以下切り上げ
出荷スペース
1バースあたり出荷スペース = トラック寸法 + 積込スペース + 通路幅
一般的には、1バースあたり120~180m²
総出荷スペース = 出荷バース数 × 1バースあたりスペース
出荷ピーク対応
⚠️ 出荷ピークの重要性
出荷は時間帯別ピークが顕著です。午前中に集中するケースが多く、 ピーク時間帯物量比を設定して、ピーク時の出荷バース数・スペースを算出します。
本システムでは、T620_稼働時間日別集計から時間帯別物量を分析し、 ピーク時間帯物量比を自動計算します。
🏪 保管設備・平面積計算
保管設備の選定
在庫物量と回転率に基づき、最適な保管設備を選定します:
| 設備種類 | 適用ランク | 特性 |
|---|---|---|
| パレットラック | A1, A2 | 高回転品、直接ピッキング、高さ活用 |
| 中量ラック | B, C | 中回転品、手作業ピッキング、3~5段 |
| 軽量ラック | C, D | 低回転品、小物、高密度保管 |
| 平置き | D | 超低回転品、デッドストック予備軍 |
保管平面積計算ロジック
ステップ1: ラック間口数計算
必要間口数 = (在庫物量 ÷ 1間口あたり収容能力)
ステップ2: ラック列数・通路数計算
ラック列数 = 必要間口数 ÷ 1列あたり間口数
必要通路数 = ラック列数 + 1
ステップ3: 保管平面積算出
ラック占有面積 = ラック列数 × ラック奥行 × ラック全長
通路面積 = 必要通路数 × 通路幅 × ラック全長
保管平面積 = ラック占有面積 + 通路面積
レイアウト効率
実際の配送センターでは、柱・壁・設備配置により、理論値通りのレイアウトは実現できません。 レイアウト効率(一般に70~85%)を設定し、実平面積を補正します:
実保管平面積 = 保管平面積 ÷ レイアウト効率
保管設備と平面積計算
📊 物流スペース集計・建屋・敷地計算
物流スペース集計
物流スペース構成
- 入荷スペース = 入荷バース数 × 1バースあたりスペース
- 出荷スペース = 出荷バース数 × 1バースあたりスペース
- 出荷作業スペース = ピッキング・仕分けスペース
- 保管スペース = 実保管平面積
総物流スペース
総物流スペース = 入荷スペース + 出荷スペース + 出荷作業スペース + 保管スペース
建屋仕様設定・計算
物流スペースに、共用部(事務所・休憩室・トイレ・機械室など)を加算し、建屋面積を算出します:
| 項目 | 内容 |
|---|---|
| 建築面積 | 1階床面積(追加面積係数 × 総物流スペース) |
| 延床面積 | 建築面積 × 階数(通常1~2階) |
| 追加面積係数 | 一般に1.15~1.30(共用部15~30%) |
敷地面積計算
建ぺい率からの逆算
必要敷地面積 = 建築面積 ÷ 建ぺい率
建ぺい率の目安
- 工業地域: 60~80%
- 準工業地域: 50~70%
- 商業地域: 70~90%
駐車場・緑地・通路の考慮
実際には、駐車場(従業員・来客)、緑地(法定緑化率)、トラック待機場、周辺通路なども必要なため、 余裕率(1.1~1.3)を乗じて最終敷地面積を算出します。
最終敷地面積 = 必要敷地面積 × 余裕率
作業員数推定(追加機能)
✅ バージョン3追加機能
配送センター規模計算_改3以降で追加された機能です。工程別の作業時間と作業効率から、 必要作業員数を推定します:
| 工程 | 作業員数算出式 |
|---|---|
| 入荷作業 | (入荷物量 × 荷卸し時間) ÷ (作業時間 × 作業効率) |
| 保管作業 | (格納作業時間 + 補充作業時間) ÷ (作業時間 × 作業効率) |
| ピッキング作業 | (出荷行数 × ピッキング時間) ÷ (作業時間 × 作業効率) |
| 仕分け・梱包作業 | (出荷物量 × 仕分け時間) ÷ (作業時間 × 作業効率) |
| 出荷作業 | (出荷物量 × 積込時間) ÷ (作業時間 × 作業効率) |
これらを合計し、管理者・事務員を加算して総必要人員を算出します。
結果の保存とExcel出力
計算結果は、EPPlusライブラリを使用してExcelワークブックとして保存されます:
- シート1: 全体サマリー(総スペース、建屋面積、敷地面積、作業員数)
- シート2: 在庫物量詳細(Iランク別)
- シート3: 入荷計算詳細
- シート4: 出荷計算詳細
- シート5: 保管計算詳細
- シート6: 設定値一覧
💾 保存先
Excelファイルは、Dat保存Path(共有モジュールで設定されたパス)に保存されます。 ファイル名は「配送センター規模計算結果_[出荷日]_[タイムスタンプ].xlsx」形式です。
⚙️ 技術的注意点
パフォーマンスと処理時間
⚠️ 大規模データでの課題
- 計算時間: 全計算開始は11個のサブプロシージャを逐次実行するため、データ量に応じて数秒~数十秒かかる
- DataGridView描画: 大量の行を表示する際、描画に時間がかかる
- Access クエリ: 複雑なJOIN・GROUP BYは遅延の原因となる
対策: 計算開始説明Tbで「計算中!!」を表示し、ユーザーに待機を促す。 将来的には進捗バー(ProgressBar)の追加が望ましい。
エラーハンドリングの状況
⚠️ エラー処理の不足
現状、Try-Catchブロックはほとんど使用されておらず、以下のエラーが発生する可能性があります:
- テーブル不存在: T610等が存在しない場合、OleDbExceptionが発生
- 0除算: 在庫日数が0の場合、DivideByZeroExceptionが発生
- 型変換失敗: TextBoxの入力値が数値でない場合、InvalidCastExceptionが発生
- Excel保存失敗: ファイルが開かれている場合、IOExceptionが発生
推奨対策: 各計算プロシージャにTry-Catchを追加し、エラー発生時は計算開始説明Tbにエラーメッセージを表示する。
保守性とコード品質
📝 コード特性
- 超大規模: 7364行のモノリシックなファイルは、保守が困難
- Region活用: #Region/#End Regionでセクション分割されており、ある程度構造化されている
- 変数名: 日本語変数名が使われており、可読性は高いが、国際化は困難
- 重複コード: 類似の計算ロジックが複数箇所に存在し、DRY原則に反する部分がある
改善案:
- 在庫計算・入荷計算・出荷計算を別クラスに分離
- 共通計算ロジックをヘルパーメソッドに抽出
- 設定値をクラスまたは設定ファイルに分離
- 単体テストの追加(現状テストコードは存在しない)
EPPlusライセンス
⚠️ EPPlusバージョンとライセンス
本システムはEPPlusライブラリを使用してExcel出力を行います。 EPPlus 5.0以降はPolyForm Noncommercial Licenseとなり、商用利用には有償ライセンスが必要です。
非商用(学術・個人)利用の場合は無償ですが、商用プロジェクトではライセンス確認が必須です。
代替案として、ClosedXML(MIT License)への移行も検討できます。
📌 まとめ
Tera計算2_3配送センタ規模計算.vbは、EIQ分析データを基に、 配送センターの最適規模を科学的に算出する計算エンジンです。
主要機能の再確認
| 機能 | 概要 | 出力 |
|---|---|---|
| 在庫物量計算 | Iランク別在庫日数・物量・保管スペース | 在庫物量推定Dgv、保管スペース概算 |
| 入荷計算 | 入荷量・荷姿・バース数・スペース | 入荷スペース計算結果Dgv、Excelシート |
| 出荷計算 | 出荷物量・形態・バース数・スペース | 出荷スペース計算結果Dgv、Excelシート |
| 出荷作業計算 | ピッキング・仕分けスペース | 出荷作業スペース計算結果Dgv |
| 保管設備計算 | ラック仕様・レイアウト・平面積 | 保管平面積計算結果Dgv、Excelシート |
| 建屋・敷地計算 | 建築面積・延床面積・敷地面積 | 建屋仕様Dgv、Excelサマリー |
| 作業員数推定 | 工程別必要人員 | 作業員数Dgv、Excelシート |
システム全体での位置づけ(再掲)
本フォームは、Tera計算2システムの最終段階であり、前段階のデータ作成フォームで生成されたEIQデータを活用します:
- メニュー画面 - ワークフロー選択
- データ作成画面 - EIQ分析データ生成(T610~TA10)
- 規模計算画面(本フォーム) - スペース算出・結果出力
開発者への推奨事項
🔧 保守・拡張時のポイント
- モジュール分割: 7364行を在庫・入荷・出荷・保管・集計の各クラスに分割
- エラーハンドリング追加: Try-Catch、入力検証、エラーログ出力の実装
- 進捗表示: 長時間計算時のProgressBar追加
- 設定外部化: ラック仕様・作業効率などを設定ファイル(XML/JSON)に移動
- 単体テスト作成: 各計算ロジックの検証テスト
- 国際化対応: 将来的な英語版対応のため、リソースファイル活用
- EPPlusライセンス確認: 商用利用の場合はライセンス取得またはClosedXMLへの移行
- データベース移行: AccessからSQL Server/PostgreSQLへの移行で大容量対応
関連ドキュメント
- Tera計算2_総合マニュアル・仕様書.html - システム全体の仕様
- Tera計算2_1メニュー画面_詳細説明.html - メニュー画面の詳細
- Tera計算2_2データ作成_詳細説明.html - データ作成フォームの詳細
- Tera計算k1.vb - 共有モジュールのソースコード