EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)snasui wrote:สูตรนั้นไม่ง่ายทั้งผู้เริ่มต้นและผู้ที่คิดว่าใช้ Excel คล่องแล้วก็ตาม เพราะเป็นการใช้แบบประยุกต์และต้องเข้าใจฟังก์ชั่น Match เป็นอย่างดี
ฟังก์ชั่น Match ที่นำมาใช้นี้เป็นการหาลำดับที่พบคำว่า ราคาล่าสุด ในช่วง P:P (หรือคอลัมน์ P นั่นเอง) จากนั้นให้บวกลำดับที่พบไปอีก 1 เพื่อนำเอาตัวเลขของราคามาใช้ เพราะราคาอยู่ถัดจากคำว่า ราคาล่าสุด 1 ตำแหน่ง
และเนื่องจากคำว่า ราคาล่าสุด มีมากกว่า 1 ตัวและเราต้องการตัวที่สองหรือตัวสุดท้ายสำหรับข้อมูลนี้ จึงต้องใช้ Match แบบหาค่าใกล้เคียงซึ่งได้ละส่วนประกอบที่ 3 ของ Match เอาไว้ (เพื่อให้แสดงลำดับสุดท้ายที่พบคำว่า ราคาล่าสุด)
สูตร IF(P:P="ราคาล่าสุด",1) เป็นการหาว่าใน P:P มีเซลล์ใดเท่ากับ ราคาล่าสุด ก็ให้แสดงเลข 1 ถ้าไม่ใช่ก็ให้แสดงค่า False สูตร Match ก็จะได้เป็น
=Match(2,{false,false,false,1,false,....}) เช่นนี้เป็นต้น
จะเห็นว่าเป็นการหาค่า 2 ว่าอยู่ในลำดับที่เท่าไรของ {false,false,false,1,false,....} นั้นไม่มีทางที่จะเจอ เพราะว่าเรากำหนดให้แสดงเพียง 1 และ false เท่านั้น สูตรนี้จึงให้ผลลัพธ์เป็นเลข 1 ลำดับสุดท้ายในช่วงของ {false,false,false,1,false,....} เท่านั้น ซึ่งเป็นสิ่งที่เข้าใจยากหากไม่เข้าใจฟังก์ชั่น Match มาเป็นอย่างดี
สมมุติว่าได้คำตอบคือลำดับที่ 83 เราก็จะนำมาบวกด้วย 1 ให้กลายเป็น 84 ซึ่งเป็นลำดับถัดไป 1 ลำดับ
นำมาแทนค่าในฟังก์ชั่น Index จะได้เป็น INDEX($P$1:$P$199,84)
หมายถึงว่าในช่วง $P$1:$P$199 ให้นำลำดับที่ 84 มาแสดง
แต่ถ้าหากพบเป็นลำดับที่ 300 จะเกิดค่าผิดพลาด เนื่องจากเราให้หาในช่วง $P$1:$P$199 เท่านั้น กรณีที่ข้อมูลมากขึ้นต้องปรับช่วงเซลล์นี้ตามปริมาณข้อมูลที่มี หรือจะเขียนสูตรเป็น
INDEX(P:P,MATCH(2,IF(P:P="ราคาล่าสุด",1))+1)
เพื่อไม่ต้องคอยปรับช่วงข้อมูล
ไม่เคยได้เจอหน้า ไม่เคยเข้าห้องเรียนด้วยneutralart wrote:ขอบคุณคุณ Snasui อย่างมากครับ ถึงผมกำลังพยายามทำความเข้าใจอยู่ก็ตาม แต่ก็ขอชื่นชมในความมีน้ำใจ และความใส่ใจในการช่วยเหลือแก้ปัญหาของคุณ Snasui มากๆ ขอชื่นชมในวัจนะภาษาที่ไม่มีผิดไวยกรณ์เลย อ่านแล้วเข้าใจง่ายชัดเจนอย่างมากครับ