“อยากทำ Feasibility Study เป็น ต้องใช้ความรู้อะไรบ้างครับ?”

FinancialModel_161024.png

ผมได้รับคำถามนี้บ่อยครั้ง

ในฐานะที่มีประสบการณ์ทำ Project Feasibility มาบ้าง ขอตอบด้วยบทความนี้ครับ ^__^

การทำ Feasibility Study ที่ดีนั้น สิ่งสำคัญที่สุดคือ ความเข้าใจธุรกิจ ไม่ใช่ โมเดลการคำนวณ

หลายคนมักหลงประเด็นว่า การทำ Feasibility คือการคำนวณ NPV, IRR, Payback Period หรือ การสร้างโมเดลการคำนวณเลิศหรูอลังการ

สิ่งเหล่านั้นคือ “เปลือก” ไม่ใช่ “เนื้อใน”

ตัวเลขจากโมเดลการคำนวณคือสิ่งที่เราใช้คุยกัน

แต่… ตัวเลขที่เราคุยกัน เชื่อถือได้มากแค่ไหน?

โมเดลการคำนวณของเรา “อ่านขาด” หรือเปล่า?

ซึ่งการ “อ่านขาด” นั้น ต้องเกิดจากความเข้าใจธุรกิจ การมองรอบด้าน และการคาดการณ์

ในการทำงานจริง ต้องใช้คนจากหลายๆฟังก์ชันช่วยกันวิเคราะห์ การมองคนเดียวไม่มีทางมองได้รอบแน่นอน

ที่สำคัญ ต้องมีคนฟังธงว่า อะไรควรมอง และอะไรที่มองข้ามไปได้ (ไม่งั้นโมเดลไม่มีทางเสร็จ ผมเคยเจอมาแล้ว T_T)

น่าเสียดาย…คงไม่มีบทความ หรือคอร์สใดๆ ที่สามารถสอนให้เข้าใจ “เนื้อใน” นั้นได้อย่างถึงแก่น

สิ่งเหล่านี้ ต้องเกิดจากการสั่งสมประสบการณ์จริง กล้าคิด การลอง

แต่ถ้าเป็นเรื่อง “เปลือก” ผมมีอะไรพอแบ่งปันได้ครับ ^__^

ขอตั้งสมมติฐานว่า ทุกคนมี “เนื้อใน” กันพร้อมมูลแล้ว เรามาลองคุยกันในแง่ของโมเดลการคำนวณครับ

เริ่มจาก ลิตส์แฟคเตอร์หรือสมมติฐาน (Assumption) ทั้งหมดที่เกี่ยวข้องกับโปรเจ็คต์ออกมาก่อน

พยายามลิสต์ออกมาให้ได้มากที่สุด เพื่อให้การคำนวณของเรามองได้รอบด้าน

Assumption.png

การออกแบบโมเดลการคำนวณที่ดี ควรแยกส่วนที่เป็นสมมติฐานออกจากตารางคำนวณให้ชัดเจน

เรียกได้ว่า ถ้าอยากแก้สมมติฐาน ก็ให้แก้ในส่วนที่เป็นสมมติฐาน ไม่แก้จากส่วนที่เป็นตารางคำนวณ

ไม่งั้นเราอาจเผลอแก้สูตรบางอย่างโดยไม่รู้ตัว และการคำนวณของเราก็จะผิด T_T

ควรใช้ Namebox ตั้งชื่อให้กับสมมติฐานสำคัญ เพื่อความสะดวกต่อการทำความเข้าใจสูตรในตารางคำนวณ และเพิ่มความชัดเจนการแสดงผลใน Scenario Summary

Assumption_Namebox.png

ควรใช้ Name Manager (กด Ctrl+F3) เพื่อช่วยจัดการสมมติฐานที่ตั้งชื่อไว้

อ้อ! อย่าสร้างเยอะเกินไปนะครับ  ไม่งั้นสับสนแน่นอน ^__^

namemanager

มาสร้างตารางการคำนวณกันครับ

เพื่อให้ง่ายต่อความเข้าใจ ผมขอใช้ตารางการคำนวณแบบไม่ซับซ้อนนะครับ

หัวใจหลักของตารางการคำนวณคือ

แสดงในรูปแบบงบกำไร-ขาดทุน (Income Statement) เพื่อคำนวณหากระแสเงินสด (Cash flow) ของแต่ละปี

ในที่นี้ ผมขอสร้างตารางการคำนวณกระแสเงินสดแบบ 10 ปีนะครับ เพราะเป็นระยะเวลาที่เรามักใช้กันในทางปฏิบัติ

calculation_incomestatement

บรรทัดสุดท้ายของตารางการคำนวณ (Row 35) ใช้คำนวณหากระแสเงินสดสะสม (Cumulative Cash Flow) ใช้เพื่อคำนวณหาระยะเวลาคืนทุน (Payback Period)

ในกรณีที่ตัวเลขเยอะ เช่น ตัวเลขหลักล้าน แต่ต้องการแสดงเป็นหลักพัน ในตาราง เราไม่ควรใส่สูตรเป็นหารพัน

(ใครแอบหารพันมาตลอด ยอมรับมาซะดีๆ ^^)

ควรใช้วิธีปรับ Custom Number Format ของเซลล์นั้นๆ (คลิกขวา/ Format Cells/ Number/ Custom)

แล้วเซ็ตให้เป็น

#,##0,

หรือ

#,##0,_)

CustomNumberFormat_DivideByThousand.png

(ใส่คอมม่า “,” เพื่อหารพัน)

(ใส่ “_)” เพื่อทำให้ตัวเลขไม่ชิดขวาสนิท เสมือนว่ามีวงเล็บปิดกั้นไว้นิดนึง (อาจใส่หรือไม่ใส่ก็ได้นะ))

ในชีวิตจริง ตารางการคำนวณจะซับซ้อนมาก เพราะแต่ละโปรเจ็คต์มีแฟคเตอร์ที่ต้องพิจารณาไม่เหมือนกัน

แต่โครงสร้างหลักของตารางคำนวณจะคล้ายๆกัน

(บางโปรเจ็คต์อาจคำนวณค่าเสียโอกาส (Opportunity Loss) และ/หรือ การจะได้มาซึ่งแฟคเตอร์แต่ละตัว อาจต้องสร้างโมเดลแยกออกมาเพื่อคำนวณแฟคเตอร์ตัวนั้นกันเลยทีเดียวเชียว T_T)

ด้านล่างที่ไฮไลต์สีดำๆ (Row 37-39) คือ KPI ที่เราใช้วิเคราะห์โปรเจ็คต์นี้

เพื่อให้เข้าใจง่าย ผมขอมอง KPI แค่ 3 ตัว คือ

  • NPV
  • IRR
  • Payback period

มันคืออะไรน่ะหรือครับ?

ขออธิบายแบบภาษาชาวบ้าน ด้วยภาพนี้ครับ

npv_irr_paybackperiod

ใครสนใจรายละเอียดของเจ้า 3 ตัวนี้ อ่านได้จากบทความเรื่อง โครงการนี้ควรลงทุนไหม วิเคราะห์ยังไงดี?? (Project Feasibility) ครับ

อ้อ! เราควรเขียนสูตรคำนวณ payback period ให้เป็นแบบอัตโนมัตินะครับ ไม่งั้นพอสมมติฐานเปลี่ยน ต้องมานั่งคำนวณมือกันใหม่ แค่คิดก็เศร้าแล้ว T_T

ใครสนใจวิธีการคำนวณ อ่านได้จากบทความ สร้างสูตรคำนวณจุดคุ้มทุน (Payback Period) แบบอัตโนมัติด้วย Excelสร้างสูตรคำนวณจุดคุ้มทุน (Payback Period) แบบอัตโนมัติด้วย Excel ครับ

ส่วน KPI ตัวอื่นที่น่าสนใจ อ่านได้จากบทความ ลงทุนโครงการนี้ดีไหม ต้องวิเคราะห์อะไรบ้าง?? [Feasibility Study] ครับ

เท่านี้เราก็สามารถคำนวณ KPI ของโปรเจ็คต์ได้แว๊ว…

เยส!

แต่เดี๋ยวก่อน! (ทำเสียงหล่อๆแบบ TV Direct จะเพิ่มอรรถรสในการอ่านมากขึ้น ^^) ในชีวิตจริง สมมติฐานมันไม่เป๊ะๆแบบนั้นเสมอไปหรอก

เวลาวิเคราะห์ เราต้องมองด้วยว่า ถ้าสมมติฐานเปลี่ยนแปลงไปแล้ว KPI แต่ละตัวจะเปลี่ยนไปอย่างไรบ้าง?

ใช่ครับ ผมกำลังพูดถึงสิ่งที่เรียกว่า Sensitivity Analysis หรือตารางที่หน้าตาประมาณนี้ครับ

SensitivityAnalysis_1.png

 

ควรทำ Sensitivity Analysis กับสมมติฐานที่สำคัญและอ่อนไหว (Sensitive) หรือพูดง่ายๆคือ ถ้าสมมติฐานนี้เปลี่ยนนิดเดียว KPI ของโปรเจ็คต์นี้อาจเปลี่ยนไปอย่างมีนัยสำคัญ

SensitivityAnalysis_2.png

Sensitivity Analysis ที่ดีนั้น ควรสร้างด้วยวิธีอัตโนมัติ หรือสร้างด้วยฟีเจอร์ที่ชื่อว่า Data Table

ใครสนใจการสร้าง Sensitivity Analysis ด้วย Data Table อ่านรายละเอียดได้จากบทความ วิเคราะห์ความอ่อนไหว (Sensitivity Analysis) แบบมืออาชีพด้วย Microsoft Excel ครับ

การสร้าง Sensitivity Analysis ที่อ่านง่ายนั้น ควรฟีเจอร์ริ่งกับ Conditional Formatting

ในที่นี้ ผมใช้ Conditional Formatting 2 แบบ คือ

  • Color Scales เพื่อใช้สีเป็นตัวบ่งบอกตัวเลข (ตัวเลขมากสีเขียว)
  • Use a formula to determine which cells to format เพื่อไฮไลต์ล้อมกรอบสี่เหลี่ยม เน้นว่าสมมติฐานที่ใช้ในการคำนวณ คือเซลล์ใดในตาราง

ConditionalFormatting_SensitivityAnalysis.png

เงื่อนไขสำหรับการไฮไลต์กรอบสี่เหลี่ยม ถ้ามีมากกว่า 1 เงื่อนไข เราใช้ฟังก์ชัน AND มาช่วยแบบนี้ครับ

ConditionalFormatting_UseAFormulaToFormat.png

ในส่วนของ Sensitivity Analysis ที่เป็น payback period ถ้าต้องการแสดงตัว y ต่อท้ายตัวเลข (เช่น 5.29 y) เราอาจเซ็ต Custom Number Format เป็น

0.00 “y”

CustomNumberFormat_AddYInFormat.png

การใช้ Data Table อาจต้องคงสูตรไว้บริเวณมุมซ้ายบน ซึ่งมักทำให้คนอ่านสับสน และฟอร์แมตไม่สวยงาม T_T

แต่เราสามารถแก้ไขได้ แบบนี้ครับ

CustomNumberFormat_FixText.png

พอเดาได้ไหมครับว่า ผมทำยังไงให้ เซลล์ O10 แสดงค่าเป็น PRICE ทั้งที่เซลล์ B37 คือเซลล์ที่คำนวณค่า payback period?

ติ๊กต่อก.. ติ๊กต่อก…

ใช่ครับ!

ผมปรับ Customer Number Format ให้เป็น

“PRICE”

CustomNumberFormat_FixText2.png

แปลว่า ไม่ว่าค่านั้นจะเป็นอะไร มันจะแสดงค่าเป็น PRICE เสมอ

(ระวัง! ถ้าค่าติดลบ จะขึ้นเป็น -PRICE อาจแก้โดยการตั้ง Customer Number Format เป็น “PRICE”;”PRICE” )

ได้ตาราง Sensitivity Analysis แล้ว

แต่…อาจยังไม่เห็น “ภาพ” พอ

ถ้าอยากแสดงให้เห็น “ภาพ” งั้นเราก็สร้างกราฟจาก Sensitivity Analysis ซะเลย!

หรือก็คือ สร้างกราฟจากตารางนี้ครับ

PriceSensitivity_Table.png

โดยอาจสร้างกราฟ Sensitivity Analysis ของ NPV เมื่อสมมติฐานเปลี่ยนแปลงไป (ในที่นี้คือราคา)

ได้ผลลัพธ์หน้าตาประมาณนี้ครับ

PriceSensitivity_NPV_170101.png

เจ๋งป่ะล่ะ ! ^^

ควรใช้กราฟ Scatter XY เพื่อแสดงผลลัพธ์จาก Sensitivity Analysis (อย่าใช้กราฟเส้น (Line)) เพราะช่วงข้อมูลใน Sensitivity Analysis อาจไม่จำเป็นต้องเพิ่มขึ้นด้วยอัตรา (Increment) ที่เท่ากันเสมอไป

จากภาพ ถ้าราคาไม่ได้เพิ่มขึ้นทีละ 100 แต่เพิ่มขึ้นด้วยอัตราที่ไม่เป็นระเบียบ เช่น 900 1,200 2,000 2,500 3,000 4,000 ถ้าสร้างด้วยกราฟเส้น กราฟที่ได้จะมีสเกลผิดเพี้ยน (แต่ปัญหานี้จะไม่เกิดขึ้น ถ้าสร้างด้วยกราฟ Scatter XY)

อ้อ! เส้นประที่แสดงในกราฟ คือการบอกว่า ราคาสมมติฐานที่ใช้ในโมเดลคือราคาใด (1,500) และได้ NPV เท่าใด (1,043 k)

เส้นประนี้ เกิดจากการใช้ Y Error Bars และ X Error Bars ของกราฟ Scatter XY นะครับ (ไม่ได้แมนวลขีดเอานะ ^^)

ErrorBars.png

การจะสร้างให้มี Error Bars ได้ ต้องสร้างกราฟเพิ่มขึ้นมาอีกหนึ่งซีรีส์

หรือก็คือสร้างทั้งหมด 2 ซีรีส์

Graph_DataSource.png

กราฟที่เพิ่มขึ้นมานี้ ผมตั้งชื่อว่า Base โดยเซ็ตให้มีค่าแกน X = สมมติฐานของโมเดล (1,500) และ ค่าแกน Y = NPV ของโมเดล (1,043 k)

Graph_2ndSeries.png

แสดงแค่กราฟ Sensitivity Analysis ของ NPV มันก็ดูแปลกๆ งั้นก็แสดงกราฟ Sensitivity Analysis (เมื่อราคาเปลี่ยนแปลงไป) ของ IRR ด้วยซะเลย

PriceSensitivity_IRR_170101.png

แถมกราฟ Sensitivity Analysis ของระยะเวลาคืนทุน (Payback Period) ให้อีกต่างหาก

PriceSensitivity_PaybackPeriod_170101.png

เอาให้ครบ ^^

ได้ทั้ง Sensitivity Analysis ที่เป็นตาราง และ กราฟแล้ว

เสร็จซะที

เย้!

แต่เดี๋ยวก่อน! (TV Direct มาอีกแล้ว ^^)

กราฟ Sensitivity Analysis แสดงได้แค่มิติเดียว (เช่น ราคาเปลี่ยนเปลงไป) ส่วนตาราง Sensitivity Analysis แสดงได้เต็มที่แค่ 2 มิติ (เช่น ราคา และ demand growth rate เปลี่ยนแปลงไป)

ถ้ามีคำถามว่า อยากให้จำลองสถานการณ์ขึ้นมาอีกแบบนึง โดยมีตัวแปรเปลี่ยนไป 5 ตัว KPI แต่ละตัวจะเปลี่ยนไปแค่ไหน?

ต้องทำไง?

เผลอๆ เจอให้จำลอง 3 สถานการณ์ เป็น

  • Worst case scenario จำลองกรณีเลวร้ายสุดๆ (Pessimistic)
  • Moderate จำลองกรณีที่คิดว่าจะเป็น (Base)
  • Best case scenario จำลองกรณีดีเวอร์ (Optimistic)

(คนถาม ไม่ได้สร้างโมเดลเองนี่หว่า คนทำเหนื่อยนะเฟ้ย T_T”)

ต้องสร้างโมเดลเพิ่มงั้นหรือ?

เปล่าเลย.. สร้างได้ง่ายมาก ด้วยฟีเจอร์ที่ชื่อว่า Scenario Manager

คลิกริบเบิน Data/ What-if Analysis/ Scenario Manager แล้วเซ็ตค่าที่ต้องการจำลองขึ้นมาครับ

scenariomanager_scenariovalue

ต้องการจำลองกี่สถานการณ์ จัดไป!

scenariomanager_main

เสร็จแล้ว คลิกปุ่ม Summary

ได้หน้าตาประมาณนี้ครับ (Scenario Summary)

ชาดา!

ScenarioManager.png

อ้อ! ควรตั้งชื่อให้กับเซลล์ที่แสดงผล KPI ต่างๆ (NPV, IRR, Payback period) ด้วยนะครับ ไม่งั้น เวลาแสดงผลใน Scenario Summary จะขึ้นค่าเป็น $B$37, $B$38, $B$39 ซึ่งไม่มีใครจำได้ว่าเซลล์เหล่านั้นเก็บค่าอะไรไว้

(ขนาดเราเป็นคนสร้างโมเดล ยังจำไม่ได้เลย ^^)

ทำมามากมาย ส่งได้หรือยัง?

ยังครับ…

อยากให้คำนึงสิ่งเหล่านี้ ก่อนเปิดอีเมล์แล้วคลิกปุ่ม “Send” ครับ

beforesubmit_feasibilitystudy

จากที่เขียนมาทั้งหมด จะเห็นได้ว่าเทคนิคที่ใช้ มีหลากหลายมาก ไม่ว่าจะเป็น

  • ใช้ Name Manager ตั้งชื่อให้สมมติฐานต่างๆ เพื่อความสะดวกต่อการทำความเข้าใจสูตรในตารางคำนวณ และเพิ่มความชัดเจนการแสดงผลใน Scenario Summary
  • ใช้ Custom Number Format เพื่อปรับรูปแบบการแสดงผล เช่น 5.29y
  • คำนวณ NPV ด้วยฟังก์ชัน NPV
  • คำนวณ IRR ด้วยฟังก์ชัน IRR  (อ่านรายละเอียด ที่นี่)
  • คำนวณ Payback Period แบบอัตโนมัติ ด้วยการประยุกต์ใช้ฟังก์ชัน MATCH และ INDEX (อ่านรายละเอียด ที่นี่)
  • สร้างตารางวิเคราะห์ความอ่อนไหว (Sensitivity Analysis) ด้วย Data Table (อ่านรายละเอียด ที่นี่) ทั้งแบบทางเดียว และแบบสองทาง (Row Input Cell และ Column Input Cell)
  • ใช้ Conditional Formatting แบบ Color Scales เพื่อช่วยอ่านผลตาราง Sensitivity Analysis ได้ง่ายขึ้น
  • ใช้ Conditional Formatting แบบ Use a formula to determine which cells to format เพื่อไฮไลต์ล้อมกรอบสี่เหลี่ยมเซลล์ในตาราง Sensitivity Analysis ว่าสมมติฐานที่ใช้ในการคำนวณ คือตัวเลขใด
  • สร้างกราฟ Scatter XY เพื่อแสดงผลลัพธ์จาก Sensitivity Analysis เหตุผลที่ใช้ Scatter XY (ไม่ใช้กราฟเส้น) เพราะช่วงข้อมูลใน Sensitivity Analysis อาจไม่จำเป็นต้องเพิ่มขึ้นด้วยอัตรา (Increment) ที่เท่ากัน
  • ใช้ X Error Bars และ Y Error Bar เพื่อแสดงเส้นประ บอกตำแหน่งของสมมติฐานในกราฟ
  • ปรับแต่งตาราง Sensitivity Analysis และกราฟแสดงผล ให้อ่านง่าย
  • ใช้ Scenario Manager เพื่อแสดง Sensitivity Analysis กรณีสถานการณ์นั้นเปลี่ยนแปลงตัวแปรมากกว่า 2

ทั้งหมดนี้ คือสิ่งที่สอนในกิจกรรม “ร่วมทำบุญ เรียนเอ็กเซล” จัดขึ้นเมื่อวันที่ 30 ตุลาคม 2016 ที่บ้านคามิลเลียน ลาดกระบัง

(อาจอธิบายบางเทคนิคไม่ละเอียด ต้องขออภัยด้วยครับ ไม่งั้นบทความจะยาววว..มาก)

กิจกรรมนี้มีจุดประสงค์เพื่อระดมทุนบริจาคให้กับบ้านคามิลเลียน โดยมีความรู้เรื่อง Feasibility Study เป็น “ของชำร่วย” ให้กับผู้เข้าร่วม

ตอนประชาสัมพันธ์ ได้รับการตอบรับดีมากๆ มีคนลงทะเบียนเต็ม 100 คน ภายใน 3 นาที!

สามารถระดมทุนได้ถึง 102,000 บาท และผลลัพธ์ที่ออกมาถือว่ายอดเยี่ยม

จัดเป็นไฮไลต์สำหรับปี 2016 เลยก็ว่าได้

หลายท่านพลาดไป ติดต่อผมหลังไมค์ว่าอยากให้เขียนบทความสรุปสิ่งที่สอนในวันนั้น

ในวาระดิถีขึ้นปีใหม่ 2017 เป็นโอกาสอันดี ผมขอมอบบทความนี้ รวมถึงไฟล์ประกอบด้านล่าง เป็นของขวัญปีใหม่ให้กับทุกคนครับ ^__^

projectfeasibility_170103

ขอให้ปี 2017 เป็นปีที่ดีของทุกคนครับ

จากใจ…. บิว วิศวกรรีพอร์ต

.

หากคุณชอบบทความแนวนี้ สามารถอัพเดตบทความใหม่ๆโดยคลิก Like เฟสบุ๊คแฟนเพจ วิศวกรรีพอร์ต หรือคลิก ที่นี่

อย่าลืมแชร์ให้เพื่อนอ่านเพื่อเป็นกำลังใจให้คนเขียนด้วยนะครับ ^__^