Page 1 of 1

ขอสอบการใช้สูตร vlookup ครับ

Posted: Mon Aug 10, 2015 2:57 pm
by oanirud
สวัสดีครับ ผมใช้สูตร vlookup ในการหาข้อมูล แต่ผมอยากทราบว่าถ้าต้องการให้มันโชว์ 2 แถว ต้องเขียนยังไงต่อครับ

ผมค้นหาด้วยเลข 14 แต่มันโชว์แค่แถวเดียวครับ

แบบที่ต้องการ
10-8-58-1.png
แบบที่ได้ออกมาครับ
10-8-58.png
ขอบคุณล่วงหน้าครับ

ไฟล์แนบครับ
id cannot.xlsx

Re: ขอสอบการใช้สูตร vlookup ครับ

Posted: Mon Aug 10, 2015 3:15 pm
by bank9597
ที่ A3 คีย์

Code: Select all

=IFERROR(INDEX(Sheet2!B$2:B$147,SMALL(IF(Sheet2!$A$2:$A$147=$A$1,ROW(Sheet2!$A$2:$A$147)-ROW(Sheet2!$A$2)+1),ROWS($B$3:B3))),"")
กด Ctrl+Shift+Enter คัดลอกทางขวา แล้วลงล่างพร้อมกัน

Re: ขอสอบการใช้สูตร vlookup ครับ

Posted: Mon Aug 10, 2015 3:25 pm
by oanirud
ขึ้นแต่ชื่อครับ แต่ข้อมูลมันซ้ำกันครับ ลองเปลี่ยนแล้วข้อมูลก็ไม่ตรงครับ
10-8-58-2.png
ขอบคุณครับ


แก้ไขครับ ทำได้แล้วครับ ขอบคุณครับ
รบกวนอีกอย่างครับ ช่วยอธิบายตรงสูตรได้ไหมครับ อยากได้แบบละเอียดเลยครับ

ขอบคุณมากๆครับ

Re: ขอสอบการใช้สูตร vlookup ครับ

Posted: Mon Aug 10, 2015 3:52 pm
by bank9597
ลองดูตามไฟล์แนบครับ

Re: ขอสอบการใช้สูตร vlookup ครับ

Posted: Mon Aug 10, 2015 4:21 pm
by oanirud
ขอบคุณครับผม

Re: ขอสอบการใช้สูตร vlookup ครับ

Posted: Wed Aug 12, 2015 7:59 am
by snasui
oanirud wrote:ช่วยอธิบายตรงสูตรได้ไหมครับ อยากได้แบบละเอียดเลยครับ
:D ในแบบละเอียดควรศึกษามาโดยตนเองจากแต่ละฟังก์ชั่นตามที่จะอธิบายตามด้านล่าง ไม่เข้าใจตรงไหนค่อยมาถามกันต่อครับ โดยสามารถศึกษาฟังก์ชั่นต่าง ๆ จาก Link นี้ครับ :arrow: Excel Functions

จากสูตร =IFERROR(INDEX(Sheet2!B$2:B$147,SMALL(IF(Sheet2!$A$2:$A$147=$A$1,ROW(Sheet2!$A$2:$A$147)-ROW(Sheet2!$A$2)+1),ROWS($B$3:B3))),"")

ลำดับความคิดของสูตรตามด้านล่างครับ
  1. หาค่าบรรทัดของข้อมูลออกมาให้ได้ก่อนว่า ข้อมูลบรรทัดใดตรงตามเงื่อนไขบ้างโดยใช้สูตร
    =IF(Sheet2!$A$2:$A$147=$A$1,ROW(Sheet2!$A$2:$A$147)-ROW(Sheet2!$A$2)+1)
    หมายถึง หาก Sheet2!$A$2:$A$147=$A$1 เป็นจริงแล้ว ให้แสดงลำดับบรรทัดของข้อมูล โดยเริ่มจากบรรทัดที่ 1 เสมอ หากไม่เป็นจริงให้แสดงค่า False
  2. เนื่องจากข้อมูลที่เข้าเงื่อนไขมีหลายบรรทัด เราสามารถนำค่าบรรทัดข้อมูลออกมาแสดงทีละบรรทัดได้โดยใช้ Small เข้ามาช่วย จะได้เป็น
    =SMALL(IF(Sheet2!$A$2:$A$147=$A$1,ROW(Sheet2!$A$2:$A$147)-ROW(Sheet2!$A$2)+1),ROWS($B$3:B3))
    หมายถึงจากคำตอบตามข้อ 1 ให้นำค่าที่น้อยที่สุดเป็นลำดับที่ 1 มาแสดง หาก Copy ลงไปด้านล่างอีกบรรทัด ก็จะหมายถึง จากคำตอบตามข้อ 1 ให้ค่าที่น้อยที่สุดเป็นลำดับที่ 2 มาแสดง เช่นนี้ไปเรื่อยๆ
  3. จากขั้นตอนที่ 2 เราได้ค่าบรรทัดของข้อมูลมาแล้ว หากต้องการนำข้อมูลมาแสดง สามารถใช้ Index เข้ามาช่วยได้ จะได้เป็น
    =INDEX(Sheet2!B$2:B$147,SMALL(IF(Sheet2!$A$2:$A$147=$A$1,ROW(Sheet2!$A$2:$A$147)-ROW(Sheet2!$A$2)+1),ROWS($B$3:B3)))
    หมายถึง จากช่วงข้อมูล Sheet2!B$2:B$147 ให้นำข้อมูลในลำดับที่ได้จากผลลัพธ์ของข้อ 2 มาแสดง
  4. หากเรา Copy สูตรตามข้อ 3 ลงไปด้านล่างเรื่อย ๆ จนหมดข้อมูลที่เข้าเงื่อนไขแล้วจะเกิด Error หากไม่ต้องการให้แสดง Error สามารถใช้ Iferror เข้ามาช่วยได้เป็น
    =IFERROR(INDEX(Sheet2!B$2:B$147,SMALL(IF(Sheet2!$A$2:$A$147=$A$1,ROW(Sheet2!$A$2:$A$147)-ROW(Sheet2!$A$2)+1),ROWS($B$3:B3))),"")
    หมายถึง หากผลลัพธ์ตามข้อ 3 เป็นค่าผิดพลาดให้แสดงค่าว่าง หากไม่ผิดพลาดให้แสดงผลลัพธ์ตามปกติ