158 第 6 章 施 工 管 理 エクセル 例 題 6-1 ネットワーク 工 程 表 の 作 成 図 6.2 に 示 すネットワーク 工 程 表 の 作 業 時 刻, 余 裕 時 間 等 を 計 算 し,クリティ カルパスを 求 める. 図 6.2 ネットワーク 工 程 表 VBA( 実 行 結 果 例 ) データ 入 力 シート * A~K の 各 作 業 の 開 始 ノード(イベント), 終 了 ノード, 所 要 日 数 を 入 力 *ダミー 作 業 も 同 様 に 入 力 ( 作 業 日 数 は0とする)
6.1 工 程 管 理 (ネットワーク 工 程 表 ) 159 VBA( 実 行 結 果 例 ) 出 力 結 果 シート 出 力 結 果 を 図 に 描 くと 下 図 のようになる. 図 6.3 ネットワーク 工 程 表 ( 出 力 結 果 より 作 図 )
160 第 6 章 施 工 管 理 VBA プログラムソース Option Explicit Sub CMD 実 行 _Click() Dim 開 始 ノード () As Integer Dim 終 了 ノード () As Integer Dim 作 業 () As String Dim 所 要 日 数 () As Integer Dim アクティビティ () As Integer Dim 必 要 日 数 As Integer Dim 作 業 数 As Integer Dim I As Integer ' ノード 数 をカウント 作 業 数 = 0 Do Until IsEmpty(Range("_ 開 始 ノード ").Offset(0, 作 業 数 )) 作 業 数 = 作 業 数 + 1 Loop ReDim 開 始 ノード (1 To 作 業 数 ) ReDim 終 了 ノード (1 To 作 業 数 ) ReDim 作 業 (1 To 作 業 数 ) ReDim 所 要 日 数 (1 To 作 業 数 ) ReDim アクティビティ (1 To 作 業 数 ) ' 入 力 開 始 ノード (I) = Range("_ 開 始 ノード ").Offset(0, I - 1) 終 了 ノード (I) = Range("_ 終 了 ノード ").Offset(0, I - 1) 作 業 (I) = Range("_ 作 業 ").Offset(0, I - 1) 所 要 日 数 (I) = Range("_ 所 要 日 数 ").Offset(0, I - 1) Sheet2.Range("C3:O25") = "" Range("B10:AA10") = "" Call 土 木 _ クリティカルパス ( 開 始 ノード, 終 了 ノード, 作 業, _ 所 要 日 数, アクティビティ, 必 要 日 数 ) ' 出 力 Range("_ 必 要 日 数 ") = 必 要 日 数
6.1 工 程 管 理 (ネットワーク 工 程 表 ) 161 If ( アクティビティ (I) <> 0) Then Range("_ アクティビティ ").Offset(0, I - 1) = _ 作 業 ( アクティビティ (I)) Else Range("_ アクティビティ ").Offset(0, I - 1) = "" End Sub Sub 土 木 _ クリティカルパス ( 開 始 ノード () As Integer, _ 終 了 ノード () As Integer, _ 作 業 () As String, _ 所 要 日 数 () As Integer, _ ByRef アクティビティ () As Integer, _ ByRef 必 要 日 数 As Integer) Dim 作 業 数 As Integer Dim ノード 数 As Integer Dim I As Integer, J As Integer, 日 数 As Integer, ノード As Integer 作 業 数 = UBound( 開 始 ノード ) ノード 数 = 0 If ( ノード 数 < 開 始 ノード (I)) Then ノード 数 = 開 始 ノード (I) If ( ノード 数 < 終 了 ノード (I)) Then ノード 数 = 終 了 ノード (I) Dim 最 早 結 合 () As Integer Dim 最 遅 結 合 () As Integer Dim トータルフロート () As Integer Dim クリティカルパス () As Integer ReDim 最 早 結 合 (1 To ノード 数 ) ReDim 最 遅 結 合 (1 To ノード 数 ) ReDim トータルフロート (1 To 作 業 数 ) ReDim クリティカルパス (1 To 作 業 数 ) ' 各 ノードの 最 早 結 合 For I = 1 To ノード 数 最 早 結 合 (I) = 0 For J = 1 To 作 業 数 If 終 了 ノード (J) = I Then 日 数 = 最 早 結 合 ( 開 始 ノード (J)) + 所 要 日 数 (J)
162 第 6 章 施 工 管 理 If 日 数 > 最 早 結 合 (I) Then 最 早 結 合 (I) = 日 数 ' 各 ノードの 最 遅 結 合 For I = ノード 数 To 1 Step -1 最 遅 結 合 (I) = 最 早 結 合 ( ノード 数 ) For J = 1 To 作 業 数 If 開 始 ノード (J) = I Then 日 数 = 最 遅 結 合 ( 終 了 ノード (J)) - 所 要 日 数 (J) If 日 数 < 最 遅 結 合 (I) Then 最 遅 結 合 (I) = 日 数 ' トータルフロート トータルフロート (I) = 最 遅 結 合 ( 終 了 ノード (I)) - _ ( 最 早 結 合 ( 開 始 ノード (I)) + 所 要 日 数 (I)) ' クリティカルパスの 選 定 J = 0 If トータルフロート (I) = 0 Then J = J + 1 クリティカルパス (J) = I アクティビティ (J) = I I ' 必 要 日 数 ノード = 終 了 ノード ( クリティカルパス (1)) 必 要 日 数 = 所 要 日 数 ( クリティカルパス (1)) For I = 2 To J If ノード = 開 始 ノード ( クリティカルパス (I)) Then 必 要 日 数 = 必 要 日 数 + 所 要 日 数 ( クリティカルパス (I)) If 終 了 ノード ( クリティカルパス (I)) = ノード 数 Then Exit For Else ノード = 終 了 ノード ( クリティカルパス (I)) I = 1 ' 最 初 から
6.1 工 程 管 理 (ネットワーク 工 程 表 ) 163 I ' 出 力 For I = 1 To ノード 数 Sheet2.Range("_ 最 早 結 合 点 時 刻 ").Offset(I - 1, 0) = 最 早 結 合 (I) Sheet2.Range("_ 最 遅 結 合 点 時 刻 ").Offset(I - 1, 0) = 最 遅 結 合 (I) Sheet2.Range("_ スラック ").Offset(I - 1, 0) = 最 遅 結 合 (I) - _ 最 早 結 合 (I) If ( 所 要 日 数 (I) > 0) Then Sheet2.Range("_ 作 業 名 ").Offset(I - 1, 0) = 作 業 (I) Sheet2.Range("_ 最 早 開 始 時 刻 ").Offset(I - 1, 0) = _ 最 早 結 合 ( 開 始 ノード (I)) Sheet2.Range("_ 最 早 完 了 時 刻 ").Offset(I - 1, 0) = _ 最 早 結 合 ( 開 始 ノード (I)) + 所 要 日 数 (I) Sheet2.Range("_ 最 遅 開 始 時 刻 ").Offset(I - 1, 0) = _ 最 遅 結 合 ( 終 了 ノード (I)) - 所 要 日 数 (I) Sheet2.Range("_ 最 遅 完 了 時 刻 ").Offset(I - 1, 0) = _ 最 遅 結 合 ( 終 了 ノード (I)) Sheet2.Range("_ 全 余 裕 ").Offset(I - 1, 0) = _ 最 遅 結 合 ( 終 了 ノード (I)) - ( 最 早 結 合 ( 開 始 ノード (I)) _ + 所 要 日 数 (I)) Sheet2.Range("_ 自 由 余 裕 ").Offset(I - 1, 0) = _ 最 早 結 合 ( 終 了 ノード (I)) - ( 最 早 結 合 ( 開 始 ノード (I)) _ + 所 要 日 数 (I)) Sheet2.Range("_ 干 渉 余 裕 ").Offset(I - 1, 0) = _ 最 遅 結 合 ( 終 了 ノード (I)) - 最 早 結 合 ( 終 了 ノード (I)) Dim 独 立 余 裕 As Integer 独 立 余 裕 = 最 早 結 合 ( 終 了 ノード (I)) - _ ( 最 遅 結 合 ( 開 始 ノード (I)) + 所 要 日 数 (I)) If ( 独 立 余 裕 < 0) Then 独 立 余 裕 = 0 Sheet2.Range("_ 独 立 余 裕 ").Offset(I - 1, 0) = 独 立 余 裕 End Sub
164 第 6 章 施 工 管 理 6.2 品 質 管 理 (x - -R 管 理 図 ) x - -R 管 理 図 は,コンクリート 強 度 試 験 の 供 試 体 のような 一 組 のデータの 平 均 値 x - の 変 化 とそのデータの 範 囲 R をグラフ 表 示 したものであり, 安 定 な 管 理 状 態 にあるか, 見 逃 せない 原 因 による 変 動 があるかを 知 るために 非 常 に 重 要 なもの である. 品 質 のばらつきが 偶 然 起 きたのか,または 見 逃 せない 原 因 によるものか 見 分 けるための 限 界 線 を 管 理 限 界 線 といい, 中 心 線 をはさんでその 上 方 にあるも のを 上 方 管 理 限 界 線 (UCL), 下 方 にあるものを 下 方 管 理 限 界 線 (LCL)と 呼 ぶ. x - 管 理 図 中 心 線 上 方 管 理 限 界 下 方 管 理 限 界 CL = x = = x - i/k i=1 UCL = x = + A 2 R - LCL = x = - A 2 R - k R 管 理 図 中 心 線 CL = R - = R i /k 上 方 管 理 限 界 上 方 管 理 限 界 k:データ( 群 )の 数 UCL = D 4 R - LCL = D 3 R - k i=1 A 2 :3 シグマ 法 の 場 合 A 2 = 3σ 2 シグマ 法 の 場 合 A 2 = 2σ 3 シグマ 法 の 場 合 の 係 数 A 2,D 3,D 4 は 下 表 で 与 えられる. 試 料 の 大 きさ n x - 管 理 図 R 管 理 図 UCL = x = + A 2 R - UCL = D 4 R - LCL = x = - A 2 R - LCL = D 3 R - A 2 D 3 D 4 2 1.88-3.27 3 1.02-2.57 4 0.73-2.28 5 0.58-2.11 6 0.48-2.00 7 0.42 0.08 1.92 8 0.37 0.14 1.86 9 0.34 0.18 1.82 10 0.31 0.22 1.78
6.2 品 質 管 理 (x - -R 管 理 図 ) 165 エクセル 例 題 6-2 コンクリート 圧 縮 強 度 試 験 の 管 理 図 の 作 成 エクセルにてコンクリート 圧 縮 強 度 試 験 の x - -R 管 理 データシートおよび 管 理 図 を 作 成 する. ワークシート( 実 行 結 果 )
166 第 6 章 施 工 管 理 ワークシート( 実 行 結 果 )
167 付 録 プログラムの 使 い 方 1 例 題 の 基 本 構 成 入 出 力 データの 取 扱 い 本 書 に 掲 載 されるすべての 例 題 は,エクセルのワークシート 上 で 実 際 に 計 算 す ることができます. 使 用 の 際, 入 力 データがワークシートのセルより 少 ない 場 合 は,セルを 増 やし て 入 力 してください. 入 力 値 のあるセルの 数 を 数 えるように 設 定 してありますの で, 入 力 数 は 自 由 に 設 定 できます. また, 入 力 数 値 の 入 るセルは 緑 色 で, 計 算 結 果 の 入 るセルは 黄 色 でセル 自 体 に 着 色 (この 本 では 灰 色 の 濃 淡 で 区 別 できます)してあります. 出 力 : 黄 色 入 力 : 緑 色 データ 数 は 増 やせます
168 付 録 2 プログラムの 作 成 変 更 2.1 セルの 名 前 他 のセルとの 判 別 をしやすくするため, 本 書 に 載 せられているほとんどの 例 題 の 入 出 力 のセルには, _ ( 半 角 アンダーバー)で 始 まる 文 字 の 名 前 がついてい ます. 名 前 ボックス エクセルで 実 際 にセルに 名 前 をつける 場 合 は, 以 下 の 手 順 で 行 います. セル C3 に _ はり 全 長 という 名 前 をつける 場 合 には 1 C3 をアクティブセルにします. 2 名 前 ボックスをクリックします. 3 _ はり 全 長 と 入 力 します. 4[Enter]を 押 します. 本 書 では,プログラムの 可 読 性 を 考 えて,ほとんどのセルに 日 本 語 の 名 前 がつけら れていますが, 実 際 に 作 成 する 際 には, 標 準 でつけられているセル 名 を 使 用 していた だいてもかまいません.