sutham wrote:รบกวนอาจารย์แปลโค๊ดให้หน่อยได้เปล่าครับ
ขอบคุณครับ

ผมจะแปลให้คร่าว ๆ ตามลำดับของฟังก์ชั่นแล้วกันนะครับ การจะเข้าใจสูตรนี้ได้จะต้องเข้าใจว่าแต่ละฟังก์ชั่นทำงานอย่างไร ฟังก์ชั่นที่เขียนให้นี้ซับซ้อนและเข้าใจยากมากสำหรับมือใหม่ครับ
จาก =LOOKUP(CHAR(255),CHOOSE({1,2},"",INDEX(ฐานข้อมูล!$C$2:$C$350,SMALL(IF(ฐานข้อมูล!$A$2:$A$350=$B$48,IF(ฐานข้อมูล!$F$2:$F$350=$D$48,ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1)),ROWS(A$56:A56)))))
จะใช้ฟังก์ชั่น Lookup ครอบอยู่บนฟังก์ชั่นอื่น ๆ ซึ่งจะต้องแปลตัวนี้ซึ่งเป็นตัวนอกสุดก่อน โดย Lookup ที่ใช้นี้มีส่วนประกอบอยู่ 2 ส่วนประกอบคือ
- CHAR(255)
- CHOOSE({1,2},"",INDEX(ฐานข้อมูล!$C$2:$C$350,SMALL(IF(ฐานข้อมูล!$A$2:$A$350=$B$48,IF(ฐานข้อมูล!$F$2:$F$350=$D$48,ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1)),ROWS(A$56:A56))))
ความหมายคือให้หาผลลัพธ์ที่ได้จาก Char(255) (ซึ่ง Char(255) คืออักขระตัวสุดท้ายที่สามารถมีได้ใน Excel) จาก CHOOSE({1,2},"",INDEX(ฐานข้อมูล!$C$2:$C$350,SMALL(IF(ฐานข้อมูล!$A$2:$A$350=$B$48,IF(ฐานข้อมูล!$F$2:$F$350=$D$48,ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1)),ROWS(A$56:A56))))
ซึ่ง Choose ที่ใช้นี้ไม่ได้ใช้อย่างปกติแต่เป็นการใช้แบบประยุกต์ โดยมี 3 ส่วนประกอบคือ
- {1,2}
- ""
- INDEX(ฐานข้อมูล!$C$2:$C$350,SMALL(IF(ฐานข้อมูล!$A$2:$A$350=$B$48,IF(ฐานข้อมูล!$F$2:$F$350=$D$48,ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1)),ROWS(A$56:A56)))
ความหมายคือให้นำส่วนประกอบที่ 2 และ 3 ของ Choose มาผนวกกันเป็นช่วงข้อมูลใหม่
ส่วน INDEX(ฐานข้อมูล!$C$2:$C$350,SMALL(IF(ฐานข้อมูล!$A$2:$A$350=$B$48,IF(ฐานข้อมูล!$F$2:$F$350=$D$48,ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1)),ROWS(A$56:A56))) มีส่วนประกอบ 2 ส่วนประกอบคือ
- ฐานข้อมูล!$C$2:$C$350
- SMALL(IF(ฐานข้อมูล!$A$2:$A$350=$B$48,IF(ฐานข้อมูล!$F$2:$F$350=$D$48,ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1)),ROWS(A$56:A56))
ความหมายคือจากข้อมูลในส่วนประกอบที่ 1 ให้ลำดับที่ได้จากผลลัพธ์ของช่วงที่ 2 มาแสดง
จากสูตร SMALL(IF(ฐานข้อมูล!$A$2:$A$350=$B$48,IF(ฐานข้อมูล!$F$2:$F$350=$D$48,ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1)),ROWS(A$56:A56)) มีส่วนประกอบ 2 ส่วนประกอบคือ
- IF(ฐานข้อมูล!$A$2:$A$350=$B$48,IF(ฐานข้อมูล!$F$2:$F$350=$D$48,ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1))
- ROWS(A$56:A56)
ความหมายคือ จากส่วนประกอบที่ 1 ให้นำค่าที่เล็กที่สุดที่ได้จากผลลัพธ์ของส่วนประกอบที่ 2 มาแสดง
จาก IF(ฐานข้อมูล!$A$2:$A$350=$B$48,IF(ฐานข้อมูล!$F$2:$F$350=$D$48,ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1)) มีแค่ 2 ส่วนประกอบ คือ
- ฐานข้อมูล!$A$2:$A$350=$B$48
- IF(ฐานข้อมูล!$F$2:$F$350=$D$48,ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1)
ความหมายคือ หากส่วนประกอบที่ 1 เป็นจริง ให้นำส่วนประกอบที่ 2 มาแสดง
จาก IF(ฐานข้อมูล!$F$2:$F$350=$D$48,ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1) มี 2 ส่วนประกอบคือ
- ฐานข้อมูล!$F$2:$F$350=$D$48
- ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1
ความหมายคือ หากส่วนประกอบที่ 1 เป็นจริง ให้นำส่วนประกอบที่ 2 มาแสดง
สูตร ROW(ฐานข้อมูล!$A$2:$A$350)-ROW(ฐานข้อมูล!$A$2)+1 จะให้ลำดับข้อมูลเรียงจากน้อยไปหามาก เป็น 1, 2, 3, 4,..., 349