兵┃法┃に┃学┃ぶ┃!┃(創刊 2003年12月15日)
━┛━┛━┛━┛━┛━┛
『┃企┃業┃シ┃ス┃テ┃ム┃戦┃略┃家┃』┃養┃成┃講┃座┃
━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛
【Vol.864】2021/5/24
企業システム戦略研究会
http://www.kigyo-systems.com/about.html

 【Excelで簡易日程計算】

 BOMを使って簡易的に日程計算するための
 Excel/VBAを紹介します。

◆元のデータ

 TOPから下位階層に向かって構成品があり、
 各階層の作業日数が決まっています。
 TOPの完了予定日に納期を入力します。


階層,部番,日数,延べ日数,開始予定日,完了予定日
0,TOP,5,,,2021/6/28
1,Assy1,2,,,
2,Part1,3,,,
3,Mate1,15,,,
2,Part2,10,,,
3,Mate2,25,,,
1,Assy2,3,,,
2,Part3,7,,,
3,Mate1,15,,,
2,Part4,12,,,
3,Mate2,25,,,


 「祝日」シートのA列に祝日を入れておきます。

2021年1月1日,(金),元日
2021年1月11日,(月),成人の日
2021年2月11日,(木),建国記念の日
2021年2月23日,(火),天皇誕生日
2021年3月20日,(土),春分の日
2021年4月29日,(木),昭和の日
2021年5月3日,(月),憲法記念日
2021年5月4日,(火),みどりの日
2021年5月5日,(水),こどもの日
2021年7月22日,(木),海の日(2021年のみ)
2021年7月23日,(金),スポーツの日(2021年のみ)
2021年8月8日,(日),山の日(2021年のみ)
2021年8月9日,(月),振替休日
2021年9月20日,(月),敬老の日
2021年9月23日,(木),秋分の日
2021年11月3日,(水),文化の日
2021年11月23日,(火),勤労感謝の日


◆計算後のデータ

 TOPから各階層までの延べ日数、
 開始予定日、完了予定日が稼働日
 で出力されます。

階層,部番,日数,延べ日数,開始予定日,完了予定日
0,TOP,5,5,2021/6/21,2021/6/28
1,Assy1,2,7,2021/6/17,2021/6/21
2,Part1,3,10,2021/6/14,2021/6/17
3,Mate1,15,25,2021/5/24,2021/6/14
2,Part2,10,17,2021/6/3,2021/6/17
3,Mate2,25,42,2021/4/23,2021/6/3
1,Assy2,3,8,2021/6/16,2021/6/21
2,Part3,7,15,2021/6/7,2021/6/16
3,Mate1,15,30,2021/5/17,2021/6/7
2,Part4,12,20,2021/5/31,2021/6/16
3,Mate2,25,45,2021/4/20,2021/5/31


以下がVBAのコードです。


Sub SetSyoyou()
 

Dim DAY_T、DAYS As Long
Dim DAY_E, DAY_S As Date
Dim DAY_Pre(20) As Long
Dim Level, Level_pre, Row As Long
Dim PartNo As String

Set strShtName = ActiveSheet

Dim ws1 As Worksheet
Set ws1 = Worksheets("祝日")

Row = 2
PartNo = strShtName.Cells(Row, 2).Value

Do While Not (PartNo = "")

 Level = strShtName.Cells(Row, 1).Value
 Level_pre = strShtName.Cells(Row - 1, 1).Value

'最上位の部品の延べ日数に日数をセットする。
 If Level = 0 Then
    If strShtName.Cells(Row, 3).Value <> "" Then
       DAY_T = strShtName.Cells(Row, 3).Value
    Else
       DAY_T = 0
    End If

     DAY_E = strShtName.Cells(Row, 6).Value
    Level_pre = 0
 Else

'Levelが下がった場合、現延べ日数をひとつ上のLevelの延べ日数に保持する。
   If Level_pre < Level Then
      DAY_Pre(Level - 1) = DAY_T
   End If

'ひとつ上のLevelの延べ日数に日数を加算して延べ日数を算出する。
   DAY_T = DAY_Pre(Level - 1) + strShtName.Cells(Row, 3).Value

 End If

'Excelに延べ日数をセットする。
 strShtName.Cells(Row, 4).Value = DAY_T

'Excelに開始予定日をセットする。
 DAY_S = WorksheetFunction.WorkDay(DAY_E, -DAY_T, ws1.Range("A1:A20"))
 strShtName.Cells(Row, 5).Value = DAY_S

'Excelに完了予定日をセットする。
 Days = strShtName.Cells(Row, 3).Value
 strShtName.Cells(Row, 6).Value = WorksheetFunction.WorkDay(DAY_S, Days, ws1.Range("A1:A20"))

 Row = Row + 1
 PartNo = strShtName.Cells(Row, 2).Value

 Loop
 On Error GoTo 0
End Sub


 いかがでしたか。

 なお、この例のように完了予定日から
 作業日数を遡って、開始予定日を計算する方法を
 「バックワードスケジューリング」と言います。

 納期が決まってから、各作業をいつ開始するのか
 を計画する場合に有効です。

 逆に、開始予定日をから作業日数を進めて
 完了予定日を計算する方法を
 「フォワードスケジューリング」と言います。

 作業開始予定から納期回答(見積)を行う
 場合に有効です。


 また、このプログラムは固定リードタイムによる
 古典的な日程計算ですが、

 高度なスケジューラーでは、
 設備の能力や競合なども考慮して
 最適な日程を計算します。

 スケジューラーが正しい計算をするにも
 BOMの精度が求められます。


 ITを活用して、いつ、何をすべきかを
 正しく見極めるには、

 その元となるBOMのようなマスターデータが
 正しくなっている必要があります。

 良い道具があっても、
 正しい情報が無いと戦いには勝てないですね。

 *********************************************
 孫子の兵法 虚実篇 
 故に戦いの地を知り戦いの日を知れば
 https://www.kigyo-systems.com/mag/Vol00253.html
 *********************************************

 付記:BOMデータは製品構成の階層順、
 (工程としては下から上)になっていますが、

 WBSデータのように作業が上から下へ時系列順に
 なっていても、延べ日数は同様のロジックで
 計算が可能です。

 ただし、その場合は開始予定日より、
 上から下への作業順に延べ日数が加算累計され、
 各作業の完了予定日を出力することになるので
 
 フォワードスケジューリングになります。

■自動でしゃべるパワーポイント(VBAマクロ)
 ノート欄のテキストを音声合成エンジンが読み上げ、
 画面も自動で切り替わるVBAマクロです!

 音声を録音するよりとっても楽です。
 失敗して録音をやり直す手間もなく、
 部分的な変更も楽々です。

 実際のVBAコードやサンプルデモ。
 https://www.kigyo-systems.com/tools.html

■間違いだらけのシステム構築(無料冊子ダウンロード)
 ~企業システムの強化書~
 https://www.kigyo-systems.com/books/book.html

■『企業システム戦略』入門【無料講座】
  http://www.kigyo-systems.com/ask3.html#form

■120社1000人以上が受講!!

 経験と勘に頼ったレビューからの脱却!
 レビューを体系的に学び、成果につなげる!

 『転ばぬ先の杖-ドキュメントレビュー』
  http://www.kigyo-systems.com/ask4.html

 『賢者は他者の経験に学ぶ-危険予知訓練』
  http://www.kigyo-systems.com/ask33.html

 『オーダーメイドの社内研修』
  http://www.kigyo-systems.com\sch.html

 『教材』※無料サンプルあり
  http://www.kigyo-systems.com\buy.html

 <講演実績>
 https://www.kigyo-systems.com/ask3semi.html#jisseki

■『企業システム戦略』コンサルティングサービス
  業務標準化とマニュアル作成から始める
  http://www.kigyo-systems.com\ask3.html

■『企業システム戦略』の実践に役立つ書籍。
  http://www.kigyo-systems.com/bookix.html

 ◆『仕様書・設計書に潜むリスクを中心とした
  ドキュメント・レビュー!!実践とチェックポイント』

 ◆『100の失敗事例に学ぶ !! ITプロジェクトの危険予知訓練』

  補助教材:IT危険予知訓練ツール
  http://www.kigyo-systems.com/tools.html

 ◆『兵法に学ぶ !!ITプロマネの極意』        

  その他の「おすすめの本」
  http://www.kigyo-systems.com/books.html

==================================
 企業システム戦略研究会オフィシャルブログ
 http://ameblo.jp/kigyo-systems/

 Facebook
 https://www.facebook.com/kigyosystems

 Ttwitter
 https://twitter.com/senryakuka

 研究テーマ
「BRMS* によるスマート・エンタープライズ実現
 と企業価値最大化に関する研究」
 *Business Rule Management System

 Research theme
「Study on the Smart Enterprise Implementation
 and Maximize Corporate Value by BRMS」

 経済産業大臣認定情報処理技術者 
  システムアナリスト、プロジェクトマネージャ、システム監査技術者
 日本ITストラテジスト協会会員
 日本生産管理学会会員、標準化研究学会会員

 読者登録・配信中止
 http://www.kigyo-systems.com/mag.html