📊 ファイル基本情報
ファイル名: Tera計算_従来計算.vb
行数: 約1,182行
クラス名: Tera計算4_参考従来計算F
継承: Form (Windows Forms)
目的: 従来型の統計的分析手法による物流データの集計・分析
主要機能: 全データ集計、出荷単位別集計、ABC分析、日別チャート表示
🏗️ プログラム構成概要
💡 このファイルの役割
EIQ分析よりもシンプルで直感的な「従来型」の分析手法を提供します。
基本的な統計集計、ABC分析、チャートによる可視化を中心に、
初心者でも理解しやすい物流データ分析を実現します。
タブコントロール構成(4つの画面)
タブ0: 全データ集計 - 全期間の総合統計とケース寸法推定
タブ1: 出荷単位別集計 - ケース/バラ出荷の詳細分析
タブ2: 各区分集計 - (未実装・将来拡張用)
タブ3: ABC分析 - パレート図とランク分類
📋 使用している名前空間
Imports System.Data.OleDb
Imports System.Windows.Forms.DataVisualization.Charting
System.Data.OleDb - Access データベース接続
System.Windows.Forms.DataVisualization.Charting - グラフ描画(時系列・パレート図)
🎯 主要機能詳細
1️⃣ 全データ集計タブ
📊 集計内容
表示項目
説明
データソース
日別集計
出荷日ごとの詳細集計(13項目)
T230_日別集計
発送先数・アイテム数
実際の出荷先/商品の総数
T130_全出荷集計
延べ発送先数
日別の発送先数の合計
T230_日別集計の合計
延べアイテム数
日別のアイテム数の合計
T230_日別集計の合計
📈 集計指標(13項目)
出荷日 - 日付
出荷先数 - 日別の出荷先実数
アイテム数 - 日別の商品実数
行数 - 伝票行数
バラ数 - バラ個数
ケース換算 - バラをケースに換算
PL換算 - パレット換算数
容積換算m³ - 総容積
重量換算Kg - 総重量
🔢 表示モード切替
実数表示: 各指標の実数値を表示
比率表示: 全体に対する比率(%)を表示
📊 全データ集計から見た特性
以下の項目の平均・最大・最小を算出:
ケース入数(バラ数÷ケース数)
ケース容積m³(容積÷ケース数)
ケース重量Kg(重量÷ケース数)
PL積付数(ケース数÷PL数)
行数/出荷先(行数÷出荷先数)
📦 ケース寸法推定
容積と重量データから標準的なケースサイズを推定:
推定ロジック:
- 容積 = W × D × H
- 重量情報も考慮
- 最も頻度の高い寸法を特定
📈 日別集計Chart
Windows Forms Chartコントロールで時系列グラフを描画:
表示1: 出荷先、アイテム数、行数
表示2: バラ数、ケース換算
表示3: PL換算、容積換算m³、重量換算トン
2️⃣ 出荷単位別集計タブ
📊 集計の種類
集計名
説明
表示内容
出荷単位別集計1
日別×出荷単位のクロス集計
各日の出荷単位ごとの詳細データ
出荷単位別集計2
出荷単位の総合集計
全期間を通じた出荷単位別の合計
出荷単位別Chart
チャート表示
3種類のグラフ表示モード
🔄 ソート機能
日別ソート: 出荷日 → 出荷単位の順
出荷単位ソート: 出荷単位 → 出荷日の順
📊 出荷単位別Chart表示モード
表示モード
SQL
表示項目
表示1
全出荷単位の集計
出荷日、出荷先数、アイテム数、行数
表示2
ケース単位のみ
出荷日、バラ数、ケース換算
表示3
特定出荷単位
選択した出荷単位の詳細推移
🎨 実数/比率表示切替
出荷単位別集計2では、実数値と全体比率(%)の切替表示が可能
3️⃣ ABC分析タブ
💡 ABC分析とは?
パレートの法則(80:20の法則)に基づき、重要度の高い商品や出荷先を特定する手法。
A(重要)、B(中程度)、C(低)の3ランクに分類します。
📊 分析対象の選択
分析軸
テーブル
ランク列
アイテム集計
TABC010_アイテム集計
行数Iランク / バラ数Iランク
出荷先集計
TABC010_出荷先集計
行数Eランク / バラ数Eランク
📈 分析指標の選択
行数基準: 伝票行数でランク付け
バラ数基準: 出荷個数でランク付け
🎨 パレート図の構成
GDI+ を使用してPictureBoxに直接描画:
X軸:アイテム数 or 出荷先数(累積)
Y軸:累積出荷量(%)
A/B/Cランクの境界線を表示
70%, 90%, 100% の基準線
📊 ABC分類基準(デフォルト)
ランク
累積比率
意味
対応策
A
0~70%
超重要商品/出荷先
最優先管理、在庫常備
B
70~90%
中程度の重要度
通常管理
C
90~100%
低頻度商品/出荷先
最小限の在庫
🔍 パレート図の描画手順
1. Bitmap生成(PictureBoxサイズ)
2. Graphics オブジェクト作成
3. 座標系の設定(原点移動、スケール変換)
4. X軸・Y軸の描画
5. データループ:
- ランク判定(A/B/C)
- 累積値計算
- 線分描画
6. 基準線描画(YA70, YB90, YC100)
7. ラベル配置
8. PictureBoxに表示
🎨 Chart表示共通機能
📊 ChartData読込処理
ChartData読込(MySQL)メソッド:
SQLクエリでデータを取得
作業用DataTableに格納
Chart用に整形
📈 Chart表示処理
Chart表示()メソッド:
ChartAreaのクリア
Series(系列)のクリア
DataTableから系列を動的生成
各系列にデータポイントを追加
凡例の設定
軸の設定
⚙️ Chart設定
設定項目
内容
ChartType
Line(折れ線グラフ)
凡例位置
右側(Right)
軸ラベル
X軸: 日付, Y軸: 数量
マーカー
Circle(丸)
💾 データベースアクセス
主要なSQLクエリパターン
1. 日別集計の取得
SELECT T230_日別集計.*
FROM T230_日別集計;
2. 出荷単位別集計の取得(日別ソート)
SELECT T330_日別出荷単位別集計.*
FROM T330_日別出荷単位別集計
ORDER BY T330_日別出荷単位別集計.出荷日,
T330_日別出荷単位別集計.出荷単位;
3. 出荷単位別の総合集計
SELECT T330_日別出荷単位別集計.出荷単位,
Sum(T330_日別出荷単位別集計.出荷先数) AS 出荷先数,
Sum(T330_日別出荷単位別集計.アイテム数) AS アイテム数,
...
FROM T330_日別出荷単位別集計
GROUP BY T330_日別出荷単位別集計.出荷単位;
4. ABC分析データ(アイテム・行数基準)
SELECT TABC010_アイテム集計.アイテム,
TABC010_アイテム集計.行数,
TABC010_アイテム集計.行数累計,
TABC010_アイテム集計.行数累計比,
TABC010_アイテム集計.行数順位,
TABC010_アイテム集計.行数Iランク
FROM TABC010_アイテム集計
ORDER BY TABC010_アイテム集計.行数順位;
🔗 接続文字列
Provider=Microsoft.ACE.OLEDB.12.0;Data Source={MyDB}
使用しているテーブル
テーブル名
説明
使用箇所
T130_全出荷集計
全期間の総合集計
全データ集計タブ
T230_日別集計
日ごとの集計データ
全データ集計タブ、日別Chart
T330_日別出荷単位別集計
日別×出荷単位のクロス集計
出荷単位別集計タブ
TABC010_アイテム集計
商品別ABC分析データ
ABC分析タブ
TABC010_出荷先集計
出荷先別ABC分析データ
ABC分析タブ
🎯 主要メソッド一覧
フォーム制御
メソッド名
説明
Form1_Load
フォーム初期化時の処理
- ファイル確認
- 全データ集計
- 特性分析
- ケース寸法推定
- Chart初期設定
tera計算1_従来計算Tc_SelectedIndexChanged
タブ切替時の処理
- 各タブの初回表示チェック
- 必要に応じてデータ読込
全データ集計タブ
メソッド名
説明
全データ集計()
T230_日別集計を読込み、集計表示
- 実数 or 比率の切替対応
- 合計行の算出
全データ集計から見た特性()
ケース入数、容積、重量等の平均・最大・最小を算出
ケース寸法推定()
容積データから標準的なケース寸法(W×D×H)を推定
日別集計Chart初期設定()
日別推移のChart初期表示
出荷単位別集計タブ
メソッド名
説明
出荷単位別集計1()
日別×出荷単位のクロス集計を表示
- 日別ソート or 出荷単位ソート
出荷単位別集計2()
出荷単位の総合集計
- GROUP BY 出荷単位
- 実数 or 比率表示
出荷単位別集計Chart初期設定()
出荷単位別の推移Chart表示
ABC分析タブ
メソッド名
説明
ABC_Data作成()
AccessマクロでABC分析テーブルを作成
- CreateObject("Access.Application")
- appAccess.Run("ABC分析開始")
ABCデータDgv表示()
ABC分析結果をDataGridViewに表示
- アイテム集計 or 出荷先集計
- 行数 or バラ数基準
ABCパレート図作成()
GDI+でパレート図を描画
- A/B/Cランクの可視化
- 累積曲線の表示
Chart共通機能
メソッド名
説明
ChartData読込(MySQL)
SQLクエリでデータを取得し、作業Dgvに格納
Chart表示()
作業DgvからChartコントロールにデータをバインド
- 系列の動的生成
- データポイント追加
- 凡例・軸の設定
GetData()
ChartのDataSourceとしてDataSetを返す
※現在は未使用
DataGridView操作
メソッド名
説明
作業Dgv読込1(MyTable, MySQL)
SQLで取得したデータを作業用のDataGridViewに格納
Dgv書式(Dgv名, 列数, 行数, 表Type)
DataGridViewの列・行を作成し、書式を設定
- セルスタイル(中央/右揃え)
- 数値フォーマット(N0, N1)
Dgv書式2(Dgv名)
より柔軟な書式設定
- 列数・行数を自動判定
- 数値/文字列の自動判定
Dgv_ABCデータ書式(Dgv名)
ABC分析専用のDataGridView書式設定
🔄 処理フローの詳細
全データ集計の処理フロー
1️⃣ フォーム読込
Form1_Load イベント発火
⬇️
2️⃣ ファイル確認
ファイル確認() - Tera計算Dataフォルダの検証
⬇️
3️⃣ 全データ集計
全データ集計() - T230_日別集計を読込
⬇️
4️⃣ 特性分析
全データ集計から見た特性() - 平均・最大・最小算出
⬇️
5️⃣ 寸法推定
ケース寸法推定() - W×D×Hの推定
⬇️
6️⃣ Chart初期設定
日別集計Chart初期設定() - 時系列グラフ表示
ABC分析の処理フロー
1️⃣ 計算開始ボタンクリック
ユーザーが「ABC分析計算開始」ボタンをクリック
⬇️
2️⃣ Accessマクロ実行
ABC_Data作成() - Accessの「ABC分析開始」マクロを実行
⬇️
3️⃣ 結果読込
ABCデータDgv表示() - TABC010テーブルからデータ取得
⬇️
4️⃣ パレート図描画
ABCパレート図作成() - GDI+で累積曲線を描画
🎨 GDI+ によるパレート図描画の詳細
描画手順
' 1. Bitmap生成
Dim img As New Bitmap(ABCパレートPb.Width, ABCパレートPb.Height)
Dim g As Graphics = Graphics.FromImage(img)
' 2. 背景を白で塗りつぶし
g.FillRectangle(Brushes.White, 0, 0, img.Width, img.Height)
' 3. 原点を左下に移動
g.TranslateTransform(img.Width * 0.1, img.Height * 0.9)
' 4. 座標範囲の設定
Dim xMax = Int(img.Width * 0.8)
Dim yMax = Int(img.Height * 0.9)
' 5. 軸の描画
g.DrawLine(Pens.Blue, xMin, 0, xMax, 0) ' X軸
g.DrawLine(Pens.Blue, 0, yMin, 0, yMax) ' Y軸
' 6. データループで累積グラフ描画
For i = 0 To DataCount
Rank = Dgv.Item(5, i).Value ' ランク取得
K = Dgv.Item(1, i).Value ' 数量取得
' ランク別に累積値を加算
If Rank.Contains("_A") Then
YA70 += K : XA70 += 1
ElseIf Rank.Contains("_B") Then
YB90 += K : XB90 += 1
End If
' 線分描画
g.DrawLine(Pens.Black, x1, -y1, x2, -y2)
Next
' 7. 基準線描画(70%, 90%, 100%)
' 8. ラベル配置
' 9. PictureBoxに表示
ABCパレートPb.Image = img
ランク判定ロジック
条件
ランク
処理
Rank.IndexOf("_A") >= 0
A
YA70累積, XA70累積
Rank.IndexOf("_B") >= 0
B
YB90累積, XB90累積
Rank.IndexOf("_C") >= 0
C
YC100累積, XC100累積
⚙️ メモリー管理
ガベージコレクションの明示的呼び出し
各処理の最後に以下を実行してメモリーを解放:
Call GC.Collect()
Call GC.WaitForPendingFinalizers()
Dispose処理
DataTable.Dispose()
Graphics.Dispose()
Font.Dispose()
ConnectionStringBuilder = Nothing
⚠️ メモリー管理の注意点
Chart表示や大量のDataGridView操作を伴うため、
各処理後に必ずGC.Collect()を呼び出してメモリーリークを防止しています。
🔧 主要な変数とチェックフラグ
グローバル変数(K1.vbから参照)
変数名
型
説明
全データ発送先数
Double
実際の発送先総数
全データアイテム数
Double
実際の商品総数
全データ延べ発送先数
Double
日別の延べ発送先数合計
全データ延べアイテム数
Double
日別の延べアイテム数合計
全データ行数
Double
総伝票行数
全データバラ数
Double
総バラ個数
全データケース換算
Double
総ケース数
全データPL換算
Double
総パレット数
全データ容積換算
Double
総容積(m³)
全データ重量換算
Double
総重量(kg)
チェックフラグ
フラグ名
説明
Chk1
全データ集計の初回読込完了フラグ
Chk2
ABC分析データ作成完了フラグ
全データ集計Chk
全データ集計タブの初回表示チェック
出荷単位別集計Chk
出荷単位別集計タブの初回表示チェック
ABC分析Chk
ABC分析タブの初回表示チェック
📊 実装されている分析手法
1. 基本統計分析
合計(Sum)
平均(Average)
最大値(Max)
最小値(Min)
2. 時系列分析
日別推移のグラフ表示
複数指標の同時表示
ピーク日の特定
3. ABC分析(パレート分析)
累積曲線の作成
A/B/Cランクの自動分類
重点管理対象の特定
4. クロス集計
🆚 EIQ分析との違い
項目
従来計算
EIQ分析
分析視点
時系列、ABC、単位別
Entry×Item の組合せ
難易度
初心者向け
中級~上級者向け
グラフ
Chart Control使用
Chart + GDI+ 手動描画
処理速度
高速
やや時間がかかる
分析深度
基本統計
詳細な出荷パターン分析
用途
概要把握、日次報告
倉庫設計、レイアウト最適化
💡 活用シーン
従来計算が適している場面
日々の出荷状況の把握
週次・月次レポートの作成
ABC分析による重点商品の特定
出荷単位(ケース/バラ)の比率分析
季節変動の確認
初心者への分析結果説明
EIQ分析が適している場面
新規倉庫の設計
既存倉庫のレイアウト変更
ピッキング動線の最適化
出荷先と商品の組合せパターン分析
詳細なロケーション管理
⚠️ 制限事項と注意点
データ量による制限
Chart表示:データポイント数が多すぎると描画が遅くなる
DataGridView:数百行以上でスクロールが重くなる可能性
パレート図:商品数/出荷先数が1000を超えると見づらい
データ形式の要件
出荷日は日付型であること
数量データは数値型であること
NULL値は0として扱われる
マスタデータ(商品、出荷先)の整合性が必要
Accessマクロの依存
ABC分析はAccessの「ABC分析開始」マクロに依存
Accessファイルが開いているとエラーになる
マクロが存在しない場合は実行不可
🔗 関連ファイル
ファイル名
説明
関係
Tera計算_K1.vb
共通変数・関数モジュール
Public変数、ファイル確認処理を使用
Tera計算_EIQ.vb
EIQ詳細分析フォーム
より高度な分析を提供
Tera計算_参考メニュー.vb
メニュー画面
このフォームを起動
SQLによるEIQ分析.accdb
Accessデータベース
データ格納、マクロ実行
🎓 コーディングスタイル
特徴
#Regionによる機能ブロック分割
日本語の変数名・メソッド名
Withステートメントによる可読性向上
処理後のメモリー解放を徹底
命名規則
要素
規則
例
DataGridView
〇〇Dgv
T230_日別集計Dgv
Chart
〇〇Chart
日別集計Chart
ボタン
〇〇Bt
出荷単位別集計Bt
ラジオボタン
〇〇Rb
全データ集計_実数Rb
チェックボックス
〇〇Cb
詳細分析日指定Cb
📚 参考情報
参照しているWebサイト(コメント内)
関連技術
Windows Forms DataVisualization.Charting
GDI+ (System.Drawing)
ADO.NET (OleDb)
COM Interop (Access Automation)
Tera計算_従来計算.vb 詳細技術仕様書
シンプルで使いやすい従来型分析を提供する約1,182行のVB.NETコード
© 2020-2026 物流技術研究所 / 寺本敏幸
このドキュメントは、従来計算モジュールの理解と保守を支援するための技術資料です。
EIQ分析との使い分けやABC分析の実装方法について詳述しています。