ต่อเนื่องจากบทความการบริหารโครงการ หรือ Project Management ด้วย Excel ที่ผมได้เขียนไปก่อนหน้านี้ ซึ่งเป็นเรื่องของการทำ Gantt Chart คราวนี้ผมจะขอพูดถึงเรื่องของการวางแผนโดยใช้ Critical Path หรือคือเส้นทางการทำงานที่สำคัญที่สุด ซึ่งถ้าหากงานใดงานหนึ่งใน Path นั้นเกิดการ Delay ปุ๊ปจะทำให้โครงการโดยรวม Delay ทันที
หมายเหตุ : เดิมทีบทความนี้ใช่สูตรสมัย Excel 2013 ซึ่งยากมาก เวลาก็ผ่านไปนานแล้ว ผมเลยปรับบทความนี้ใหม่ให้ใช้สูตรของ Excel 365 จะได้เขียนสูตรง่ายขึ้น และทำให้ข้อมูลเป็น Table จะได้อ่านสูตรง่ายขึ้นและมีความ Dynamic มากขึ้นด้วย
สารบัญ
Case ตัวอย่าง
โดยผมใช้ภาพประกอบจากบทความนี้ ซึ่งมีอธิบายเรื่องวิธีการคำนวณแบบ Manual ให้ด้วย แต่ผมจะอธิบายวิธีการทำแบบ Auto ใน Version Excel ให้ดูครับ

วิธีการอ่านรูป
- A,B,C คือชื่อของงานย่อยๆ
- ตัวเลขในกล่องสี่เหลี่ยมคือ ระยะเวลาที่ต้องใช้ในการทำงานนั้นๆ
- ลูกศรที่ชี้คือทำงานนั้นเสร็จแล้วต้องทำงานอะไรต่อ (แสดงความ dependency กัน) เช่น งาน B จะเริ่มทำได้เมื่อ A และ D เสร็จแล้วทั้งคู่เท่านั้น
ความหมายของคำศัพท์แต่ละอัน
มีองค์ประกอบอยู่ 4 ตัวที่สำคัญ คือ
- Early Start (ES) : งานนั้นๆ จะเริ่มเร็วสุดได้เมื่อไหร่ = Early Finish ของ Activity ก่อนหน้าอันสุดท้าย + 1 นั่นเอง
- Early Finish (EF) : งานนั้นๆ จะเสร็จได้เร็วสุดเมื่อไหร่ = Early Start + Duration ของงาน -1 (เพื่อ adj ให้นับวันเริ่มด้วย)
- Late Finish (LF) : งานนั้นๆ จะเสร็จได้ช้าสุดเมื่อไหร่ = Late Start ของ Activity ถัดไปอันแรก -1
- Late Start (LS) : งานนั้นๆ จะเริ่มได้ช้าสุดเมื่อไหร่ = Late Finish – Duration + 1
Assumption
สมมติว่าทำงานนึงเสร็จวันที่ 5 งานที่ต้องทำลำดับต่อไปจะเริ่มได้เร็วสุดวันที่ 6 นะครบ (ถือว่าวันที่ 5 คือสิ้นวันแล้ว)
ซึ่งเราจะคำนวณพวก Early Start, Early Finish, Late Start, Late Finish ของแต่ละงานแบบอัตโนมัติครับ บอกไว้ก่อนว่าสูตรในบทความนี้ค่อนข้างซับซ้อน กรุณาทำใจก่อนดู 555
เริ่มลงมือทำ
ข้อมูลดิบใน Excel
เราบันทึกข้อมูลลงไปประมาณนี้
Activity Duration งานก่อนหน้า
A 10
B 12 A,D
C 9 B
D 5
E 7 D,G
F 6 E
G 3
H 4 G
I 6 H
โดยผมทำเป็น Table ไว้ จะได้อ่านสูตรง่ายขึ้นและมีความ Dynamic มากขึ้นด้วย
เริ่มคำนวณ ES และ EF
เราจะต้องคำนวณ Early Start (ES) ก่อน ซึ่งคำนวณมาจาก
Early Start (ES)
= Early Finish ของ Activity ก่อนหน้าอันสุดท้าย + 1
ซึ่ง Early Finish ของ Activity ก่อนหน้าอันสุดท้าย ถ้าไม่มีก็คือถือว่าเป็น 0 ไปนั่นเอง ซึ่งเราใช้ IF มาดักได้
Early Start (ES)
= IF([@งานก่อนหน้า]="",0,[@[Max EF ก่อนหน้า]])+1
ส่วน EFก่อนหน้า เรายังไม่มี ก็ต้องคำนวณออกมาก่อน ซึ่งทำได้โดยใช้สูตรที่ว่า
Early Finish (EF)
= ESตัวนั้น + Duration -1
= [@ES]+[@Duration]-1
ซึ่ง EF ก่อนหน้า มันอาจมีหลายตัวก็ได้ เช่น กิจกรรม B มีก่อนหน้าคือ A กับ D ซึ่งเราต้องทำการ Lookup ค่า EF ของ A กับ D ออกมา แล้วหาค่า MAX ซึ่งเราทำแบบนี้ได้
Max EF ก่อนหน้า
=MAX(XLOOKUP(TEXTSPLIT([@งานก่อนหน้า],","),[Activity],[EF]))
ที่นี้จะเห็นว่างานที่จะเสร็จเป็นอันสุดท้ายคือ C ซึ่งจะไปจบวันที่ 31 ไอ้เส้นทางที่จบที่ C นี่แหละ คือ Critical Path ล่ะ

เดี๋ยวต่อไปเราจะคำนวณ LF กับ LS นะครับ โดยจะคำนวณ LF ก่อน เพราะเรารู้แล้วว่าต้องจบไม่เกิน 31 นะ
ปรับตารางให้ทำงานง่ายขึ้น
เพื่อให้ง่ายขึ้น จากนั้นผมจะเพิ่มคอลัมน์อีกอัน ชื่อว่า “งานต่อหลัง” เพื่อคำนวณว่า งานนั้นมีอะไรต่อหลังจากนั้นนั้นๆ บ้าง?
หลักการคือ เราหางานที่จะตามหลังจากงานบรรทัดนั้นๆ ด้วย FILTER + FIND แล้วค่อยเอาผลลัพธ์ที่ได้มารวมกันด้วย TEXTJOIN
งานต่อหลัง
=TEXTJOIN(",",TRUE,FILTER([Activity],ISNUMBER(FIND([@Activity],[งานก่อนหน้า])),""))

คำนวณ LF และ LS
สำหรับ LF นั้น = Late Start ของ Activity ถัดไปอันแรก -1 แต่ถ้าเป็น Activity สุดท้ายแล้ว (ไม่มีตัวต่อ ก็จะเท่ากับค่า MAX ของ EF)
ดังนั้นเราจะเขียนสูตรได้ว่า ถ้าตัวตามหลังไม่มี ก็ให้ LF เป็น MAX EF เลย
LF
=IF([@งานต่อหลัง]="",MAX([EF]),[@[Min LS ถัดไป]] -1)
จากนั้นเราคำนวณ LS (Late Start) ก่อน
LS
=[@LF]-[@Duration]+1
คราวนี้เราจะกลับมาคำนวณ LF ที่ค้างไว้ โดย Min LS ถัดไป ก็คือต้อง Lookup LS ของงานต่อหลังมา แล้วหาค่า MIN
Min LS ถัดไป
=MIN(XLOOKUP(TEXTSPLIT([@งานต่อหลัง],","),[Activity],[LS]))
แล้วเราก็จะได้ผลลัพธ์ครบทุกช่องตามต้องการแล้ว

จัดเรียงหน้าตาและทำ Gantt Chart
ถ้าสูตรทุกอย่าง work แล้ว เราอาจจะรวบสูตร
เอา Max EF ก่อนหน้า ไปรวมกับ ES
ES
= IF([@งานก่อนหน้า]="",0,MAX(XLOOKUP(TEXTSPLIT([@งานก่อนหน้า],","),[Activity],[EF])))+1
เอา Min LS ถัดไป รวมกับ LF
LF
=IF([@งานต่อหลัง]="",MAX([EF]),MIN(XLOOKUP(TEXTSPLIT([@งานต่อหลัง],","),[Activity],[LS])) -1)
จากนั้นจัดเรียงคอลัมน์ใหม่ให้เหมาะสม เช่น ให้ LS ขึ้นก่อน LF แล้วเว้นไป 1 คอลัมน์ แล้วสร้างคอลัมน์ใหม่เป็น 1-32 (ให้เลยวันสุดท้าย)
ที่เว้น 1 คอลัมน์ จะได้ไม่ต้องทำเป็น Table
จะได้หน้าตาแบบนี้

ต่อไป ผมจะใส่ Conditional Format 2 อัน สำหรับในช่อง ES-EF กับ LS-LF
สำหรับ ES-EF เราจะทำอันนึงเป็นสีน้ำเงินแบบมี Pattern แนวตั้ง (จะได้มองทะลุด้านหลังได้) ซึ่งเขียน Conditional Format แบบ Custom ดังนี้ (เลือกพื้นที่เริ่มจาก J3)
Conditional Format ES-EF สีน้ำเงิน
=AND(J$2>=$D3,J$2<=$E3)
สำหรับ LS-LF เราจะทำเป็นสีเหลืองแบบทึบ ซึ่งเขียน Conditional Format แบบ Custom ดังนี้ (เลือกพื้นที่เริ่มจาก J3)
Conditional Format LS-LF สีเหลือง
=AND(J$2>=$G3,J$2<=$H3)
ซึ่งเราจะเรียงเอาสีน้ำเงินขึ้นก่อน ไม่งั้นเดี๋ยวจะมองไม่เห็น

แค่นี้เราจะเห็นได้ชัดเลยว่าสามารถเริ่มงานอะไรได้ตั้งแต่ตอนไหน เริ่มได้ช้าสุดตอนไหน
และเราจะสังเกตได้ง่ายเลยว่าตรงไหนคือ Critical Path ซึ่งก็คืองานที่สองสีซ้อนกัน 100% ทั้งงานนั่นเอง (ไม่มีเวลาให้ Late ได้เลย)

ซึ่งทุกอย่างจะเปลี่ยนแบบอัตโนมัติทั้งหมดด้วย!
ลองเปลี่ยน Dependency
ลองแก้โจทย์ว่างาน G ต้องทำงาน B ให้เสร็จก่อนดู

จะเห็นว่าตัวเลขทุกอย่างเปลี่ยนตามหมดเลย
ซึ่งถ้าลอง Sort ตาม LS อาจจะดูง่ายขึ้นได้ดังนี้

สรุป
เราสามารถใช้ Excel คำนวณเรื่อง Critical Path ได้ แต่ก็ต้องใช้ทั้งความเข้าใจหลักการของ Project Management เอง และความเข้าใจเรื่องของการใช้สูตรต่างๆ ด้วย
Leave a Reply