ในตอนที่แล้วเราได้เรียนรู้คร่าวๆ ไปแล้วว่าคนเราสามารถพัฒนาให้ Logic ดีขึ้นได้ ในบทความนี้เราจะมาฝึกแปลงความคิด หรือข้อความธรรมดาๆ ให้เป็นข้อความเชิง Logic กัน
การอ้างเหตุผลที่เกี่ยวข้องกับใน Excel นั้น จะเป็นการอ้างเหตุผลประเภท Deductive Reasoning แปลไทยว่า การให้เหตุผลแบบนิรนัย ซึ่งก็คือการสรุปจากเหตุที่มีไปหาผล (หรือ Top-Down) ซึ่งจะเป็นแนวทางแบบเดียวกับวิชาคณิตศาสตร์
ซึ่งจะต่างกับ Inductive Reasoning ซึ่งใช้ผลลัพธ์ที่สังเกตจากหลายๆ เหตุการณ์ แล้วหารูปแบบหา Pattern จากนั้นนำมาสรุปเป็นกฎหรือสาเหตุ พูดง่ายๆ คือ สรุปจากผลไปหาเหตุ (หรือ Bottom-Up) ซึ่งจะเป็นแนวทางของวิชาวิทยาศาสตร์
ดังนั้นเราจะมาลงลึกด้วยการอ้างเหตุผลแบบ Deductive Reasoning กันครับ เพราะมันคือรูปแบบที่เราใช้กันใน Excel นี่แหละ
สารบัญ
วิธีการแปลงข้อความในชีวิตประจำวันให้เป็น TRUE/FALSE Statement
เอาล่ะขั้นต่อไปที่เราจะต้องทำให้ได้ คือการหัดแปลงข้อความธรรมดาๆ ให้กลายเป็นตัวแปรสัญลักษณ์ทาง Logic ให้ได้ก่อน
ทีนี้มันจะมีอยู่ 2 ส่วนหลักๆ คือ
- ประพจน์ หรือ Propositions : ส่วนประโยคย่อยที่ให้ค่าออกมาเป็น TRUE/FALSE ได้ แปลว่ามันมีความแน่นอนชัดเจน ไม่ใช่ความคิดเห็น ไม่ใช่ประโยคคำถาม
- ใครตอบก็จะต้องได้ TRUE/FALSE แบบเดียวกัน (กรณีใช้ Excel แสดงว่าคนตอบก็คือ Excel นั่นแหละ)
- ถ้าเป็นใน Excel เราเรียกว่าเป็นข้อมูลประเภท Logic
- ซึ่งค่า TRUE/FALSE มักจะเกิดจากการใช้เครื่องหมายเปรียบเทียบ ไม่ว่าจะเทียบตัวเลข หรือเทียบข้อความก็ตาม เช่น A1>1000, A2=”แมว”
- คำเชื่อม Logic : เราต้องหัดดูให้ออกว่า คำเชื่อมในประโยคมันเป็นเงื่อนไขแบบไหน AND, OR, NOT, IF…Then… (ถ้า แล้ว), ก็ต่อเมื่อ ซึ่งใน Excel ก็จะมีตัวเชื่อม Logic ให้เหมือนกันดังนี้
ตารางค่าความจริงเมื่อใช้ตัวเชื่อม logic
ตารางค่าความจริงที่คนใช้ Excel ควรจะแม่นก็คือตัวที่ผมใส่สีเหลืองไว้ สรุปคือ
- เงื่อนไขแบบและ (AND) จะใช้กรณีที่เงื่อนไขย่อยทั้งหมดจะต้องเป็นจริงเท่านั้น (จึงจะให้ผลลัพธ์เป็นจริง) ถ้าให้เทียบก็เหมือนคนที่เรื่องมาก spec เยอะ ต้องได้ทุกอย่าง
- เงื่อนไขแบบหรือ (OR) จะใช้กรณีที่เงื่อนไขย่อยอย่างน้อยตัวใดตัวหนึ่งต้องเป็นจริง (จึงจะให้ผลลัพธ์เป็นจริง) ซึ่งในทีนี้จะเป็นจริงหลายตัวก็ได้ ถ้าให้เทียบก็เหมือนคนสบายๆ อะไรก็ได้
- Tips : จะมีอีกตัวคล้ายกันคือ XOR (Exclusive OR) ที่แปลว่าให้เลือกได้แค่อย่างเดียวเท่านั้น ห้ามเป็นจริงทั้งคู่ แต่ใน Excel เรามักจะไม่เจอแบบนี้เท่าไหร่
- NOT คือการกลับจริงเป็นเท็จ เท็จเป็นจริง อันนี้ง่ายมาก เขียนได้ว่า (NOT P หรือ ~P ก็ได้)
- นอกนั้นเป็นเรื่องของกลุ่มเงื่อนไข (Condition) ที่จะพูดถึงถัดไป
Gang เงื่อนไขให้ Logic ดี
ทีนี้มันจะมี Gang เงื่อนไขระหว่างสองเหตุการณ์ ซึ่งบางทีอาจเกิดความสับสนได้ ดังนั้นเราจะมาพิจารณาดูกันดีๆ นะครับ
ถ้าเอาจริงๆ มันจะมี 3 ตัว ซึ่งผมไม่ค่อยอยากแปลเป็นไทยมากนัก เพราะอาจเข้าใจผิด คือ
- if…A…then…B : ถ้ามีเหตุ A เกิดขึ้นก็เพียงพอที่จะทำให้เกิดผล B ขึ้นแน่นอน (เขียนได้ว่า A->B)
- B only if A : ผล B เกิดขึ้นมาได้ จำเป็นต้องมีเหตุ A
(แต่ว่า มีเหตุ A อาจไม่มีผล B ก็ได้ เพราะเหตุอาจไม่เพียงพอ)
ดังนั้นสรุปได้แค่ว่ามี B ต้องมี A แน่ๆ จึงเชียนได้ว่า B->A
เช่น “ไฟไหม้ จำต้องต้อง (only if) มีออกซิเจน” สามารถสรุปได้ว่า
เทียบเท่ากับ if ไฟไหม้ then มีออกซิเจน (ดังนั้นจะมองในรูป if..then.. ก็ได้) - A if and only if B : A และ B ต่างเป็นตัวที่ทำให้เกิดอีกตัวนึงทั้งคู่ (A<->B)
เช่น ผมจะได้รับปริญญา ก็ต่อเมื่อ(if and only if) ผมเรียนจบ
แปลว่า ถ้าเรียนจบ ก็ได้รับปริญญาชัวร์
ถ้าได้รับปริญญา ก็แสดงว่าเรียนจบชัวร์
(มองได้ทั้ง 2 ทาง)
แต่ใน Excel เราจะเป็นแบบ if …A… then ….B…. (ทิศเดียว) ดังนั้นมาดูรายละเอียดกันครับ
IF…Then…. เชิง Logic
if A then B (ซึ่งเขียนได้อีกแบบว่า A->B)
แปลว่าเมื่อมีเหตุ A จะเกิดผลลัพธ์ B ขึ้นอย่างแน่นอน
ตรงนี้ตีความหมายได้หลายอย่าง อ่านดีๆ นะ
- เหตุ A เพียงพอแล้วที่จะ Trigger (เหนี่ยวไก) ทำให้เกิดผล B ได้เลย
- ถ้าไม่เกิดผล B แสดงว่าเหตุ A ไม่ได้เกิดขึ้น (เพราะถ้า A เกิดขึ้น B ต้องเกิดแน่นอน)
- ไม่ได้แปลว่า ถ้า A ไม่เกิด แล้ว B จะไม่เกิดไปด้วยนะ (เพราะ B อาจจะเกิดจากเหตุอื่นก็ได้ เพราะ A เป็นสาเหตุที่เพียงพอ แต่ไม่ใช่สาเหตุที่จำเป็น)
ตัวอย่าง: ทั้งหมดคือความหมายเดียวกัน (ผมสอบผ่าน=A, ผมได้รางวัล=B)
- ถ้าผมสอบผ่าน ผมจะได้รางวัล (A->B)
- ผมจะได้รางวัล ถ้าผมสอบผ่าน (แค่สลับประโยค แต่ logic เดิม) (A->B)
- ถ้าผมไม่ได้รับรางวัล แสดงว่าผมสอบไม่ผ่าน (Not B->Not A) (เพราะถ้าสอบผ่าน มันต้อง trigger ให้เกิดการรับรางวัลไง)
IF ใน Excel
ซึ่งเงื่อนไข if…then…ที่อธิบายข้างบนนี่ คล้ายกับฟังก์ชัน IF ใน Excel มากๆ เลย นั่นคือ
ถ้าเงื่อนไขเป็นจริงแล้วจะให้ผลเป็นอะไร ซึ่งผลนั้นจะเกิดขึ้นเสมอเมื่อเงื่อนไขเป็นจริง (เงื่อนไขคือเหตุที่เพียงพอแล้ว ที่จะทำให้เกิดผล)
อย่างไรก็ตาม ในฟังก์ชัน IF ของ Excel เราจะต้องระบุผลกรณีที่เงื่อนไขไม่จริงด้วย ว่าจะให้แสดงผลลัพธ์ยังไง
พูดง่ายๆ คือใน Excel เป็นแบบ if…then…else…
ถ้า…เงื่อนไข…then…จะทำอะไรถ้าเงื่อนไขเป็นจริง…
else…จะทำอะไรถ้าเงื่อนไขเป็นเท็จ
=IF(logical_test,value_if_true,[value_if_false])
=IF (เงื่อนไข,ผลลัพธ์กรณีจริง,[ผลลัพธ์กรณีไม่จริง])
Tips: ถ้าเราไม่ระบุกรณี else มันจะให้ค่ากลับมาเป็น FALSE ซึ่งเดี๋ยวก็งงอีก
Tips2: ใน Excel เรามักใส่ผลลัพธ์กรณี false ให้ไม่เหมือน true (ไม่งั้นจะใช้ if ทำไม จริงมะ?)
แต่ถ้าในเชิง Logic จริงๆ กรณีเงื่อนไขไม่จริง ผลลัพธ์อาจจะไม่ใช่ตัวที่ตรงข้ามกับ value_if_true ก็ได้นะ มันอาจจะเป็นอะไรก็ได้เลย หรืออาจะเหมือน true ก็ได้
ปัญหาตัวอย่าง
ปัญหาตัวอย่าง1
“ถ้าทำยอดขายได้มากกว่า 1000 เธอจะได้โบนัส”
- A = (เธอ)ทำยอดขายได้มากกว่า 1000
- B = เธอได้โบนัส
- สรุป Logic เป็น : if A then B
หรือเขียนว่า A ->B ก็ได้ แต่ผมจะใช้ if…then… เพื่อให้คล้าย Excel ที่สุด - if ทำยอดขายได้มากกว่า 1000 then เธอได้โบนัส
(assume ว่าถ้าทำไม่ได้ ก็ถือว่าไม่ได้โบนัสไป)
ปัญหาตัวอย่าง2
“ร้านนี้ไม่อนุญาตให้คนอายุต่ำกว่า 18 ปีเข้า”
ถ้าดูจริงๆ เราสามารถพูดอีกแบบในความหมายเดียวกันว่า
“ถ้าเธออายุต่ำกว่า 18 ปี เธอจะเข้าร้านนี้ไม่ได้”
- A = เธออายุต่ำกว่า 18 ปี
- B = เธอเข้าร้านนี้ไม่ได้
- สรุป Logic : if A then B
- if เธออายุต่ำกว่า 18 ปี then เธอเข้าร้านนี้ไม่ได้
(assume ว่าถ้าอายุไม่ต่ำกว่า 18 ก็ถือว่าเข้าได้)
ปัญหาตัวอย่าง3
“ร้านนี้ลดราคาให้เฉพาะคนมีบัตรสมาชิก ที่มาซื้อของในวันอังคารเท่านั้น”
- A=มีบัตรสมาชิก
- B=ซื้อของวันอังคาร
- C=ลดราคา
- สรุป Logic : if A and B then C
- เพราะว่าต้องมีบัตรสมาชิกด้วย และซื้อวันอังคารด้วยทั้งสองเงื่อนไข จึงต้องใช้ AND
- ซึ่งใน Excel ใช้เป็น AND(เงื่อนไข1,เงื่อนไข2)
ปัญหาตัวอย่าง4
“คุณต้องฝากเงินตั้งแต่ 10000 ขึ้นไปถึงจะได้ดอกเบี้ยพิเศษ ยกเว้นว่าคุณจะเป็นลูกค้า VIP (ก็จะได้ดอกพิเศษเสมอ)”
- A = ฝากเงินตั้งแต่ 10000 ขึ้นไป
- B = เป็นลูกค้า VIP
- C = ได้ดอกเบี้ยพิเศษ
- สรุป Logic : if A or B then C
- เพราะว่าฝากเงินเยอะก็ได้ เป็น VIP ก็ได้ อย่างน้อยอันใดอันหนึ่ง จึงต้องใช้ OR
- ซึ่งใน Excel ใช้เป็น OR(เงื่อนไข1,เงื่อนไข2)
ปัญหาตัวอย่างแบบซับซ้อน
“จะเป็น Model ที่นี่ได้นะ ถ้าเป็นผู้ชาย จะต้องสูงเกิน 180 ถ้าเพศอื่นๆ จะต้องสูงเกิน 170”
ตรงนี้ทำได้หลายแบบมากๆ นะ ถ้าวาดรูปแล้วจะเห็นชัดขึ้น
- A=เป็นผู้ชาย
- B=สูงเกิน 180
- C=สูงเกิน 170
- D=เป็น Model ได้
สังเกต
- การที่ Diagram เข้าไปยังชั้นถัดไป เปรียบเสมือนเงื่อนไขแบบ AND หรือจะใช้ IF ซ้อนกันก็ได้
- การที่ Diagram เป็นคนละเส้นทางที่ไปสู่ผลลัพธ์เหมือนกัน (การได้เป็น Model จริงๆมี 2 เส้นทาง คือสายบนกับสายล่าง จริงมะ?) เปรียบเสมือนเงื่อนไขแบบ OR
สรุป Logic
- แบบ if ซ้อนกัน : if A then (if B then D) else (if C then D)
- แบบ AND OR : if (A and B) or (not A and C) then D
สูตรซับซ้อนไปอ่านไม่รู้เรื่องเลย ทำไงดี
จะเห็นว่าสูตรที่ได้มันซ้อนกันยาวมาก จนดูแทบไม่รู้เรื่องเลย นี่คือผลลัพธ์กรณีเรารวมทุกอย่างไว้ที่ช่องเดียว มันก็จะดูไม่รู้เรื่องแบบนี้แหละ
แต่ถ้าเรายังไม่คล่อง เราก็สามารถแยกผลลัพธ์ทดเอาไว้ทีละส่วนก่อนก็ได้ เช่น
จะเห้นว่ามันดูง่าย และเข้าใจง่ายขึ้นตั้งเยอะ จริงมะ?
แนวทางฝึกฝนเพิ่มเติม
ลองสมมติสถานการณ์แล้วเขียนออกมาเป็นสูตร IF ให้ได้ ทำบ่อยๆ เดี๋ยวก็คล่องครับ
จะ Comment โจทย์แล้วให้เพื่อนๆ มาลองตอบก็ได้นะครับ ^^
สรุปเรื่อง Logic vs Excel
ถ้าจะมองจริงๆ เรื่องเกี่ยวกับ Logic ใน Excel มันมีแค่นี้แหละ เราไม่ต้องไปพิสูจน์เรื่องความสมเหตุสมผล ไม่ต้องไปพิสูจน์สัจนิรันดร์อะไรเหมือนตอนเรียนวิชาตรรกศาสตร์เลย
ใน Excel เราแค่เขียนเงื่อนไข if…then…else ให้เป็น อาจมีผสม AND OR NOT บ้างเท่านั้นเอง เราต้องเช็คตัวเองว่าแยกเงื่อนไข AND OR ได้รึยัง?
หลักสำคัญคือการแปลงสิ่งที่คิดจากข้อความธรรมดาให้เป็นข้อมูลเชิง Logic ซึ่งอย่าลืมว่าการใช้เครื่องหมายเปรียบเทียบ เป็นวิธีนึงที่จะได้การจะได้ค่า TRUE/FALSE ได้นะ หัดใช้เยอะๆ ล่ะ
สำหรับเรื่อง Logic ในตอนหน้าจะเป็นตอนสุดท้าย จะเป็นการแนะนำแหล่งที่เอาไว้ฝึกฝนความคิดเชิง Logic ให้เก่งขึ้น ซึ่งอาจมีเกม มีเว็บต่างๆ แนะนำให้อีกทีครับ ^^
ความคิดเชิงระบบ ปัญหาใหญ่อีกเรื่อง
จากที่ได้ทำบทความเรื่อง Logic มาสองตอน ผมคิดว่าปัญหาใหญ่อีกอย่างที่คนใช้ Excel เผชิญอยู่ คือ ความคิดเชิงระบบ หรือ Systems Thinking ด้วย ซึ่งก็คือแนวคิดที่ว่าอะไรสัมพันธ์กันยังไง อะไรเป็น Input Output ฟันเฟืองย่อยๆ ทำงานต่อกันเป็นภาพรวมยังไง?
อย่าลืมว่าใน Excel แต่ละช่อง cell นั้นสามารถเป็นทั้ง Output ในช่องตัวเอง และเป็น Input สำหรับช่องอื่นต่อไปได้ด้วย ดังนั้นความคิดเชิงระบบก็เป็นอีกเรื่องที่จำเป็นมากครับ
ซึ่งเดี๋ยวผมจะพยายามสรุปให้อีกทีในบทความต่อๆ ไปนะครับ รอติดตามได้