กฏกติกาของฟอรัม : แจ้งชื่อและนามสกุลจริงในการสมัครสมาชิก--ตั้งชื่อกระทู้ให้ตรงกับปัญหาที่ถาม--เขียนอธิบายคำถามทั้งในตัวกระทู้และในแฟ้มแนบให้ละเอียด--ห้ามใช้คำว่า อ่ะ คับ หรือคำผวน หรือคำที่ไม่มีในพจนานุกรมไทย--โปรดตั้งชื่อแฟ้มให้สื่อถึงปัญหาที่ถาม--อย่าระบุชื่อให้คนใดคนหนึ่งเป็นผู้ตอบ--งดให้ความร่วมมือหรือช่วยตอบคำถาม กระทู้ที่ละเมิดกฏกติกาของฟอรัม
Results 1 to 18 of 18

Thread: การใช้เงื่อนไข IF, AND, OR ซับซ้อนหลายขั้น

  1. #1

    Join Date
    Apr 2009
    Location
    Home Product Center PCL.
    Job
    เจ้าหน้าที่ฝึกอบรม ฝ่ายวางแผนและประเมินผล
    Version
    Excel 2003/windows xp=ที่ออฟฟิต, Excel 2007/Windows xp=ที่บ้าน
    Posts
    4

    Icon5 การใช้เงื่อนไข IF, AND, OR ซับซ้อนหลายขั้น

    ในการ Report ผลการทดสอบ จะมีเกณฑ์ และเงื่อนไขต่างกัน ซึ่งปัญหาที่เจอคือ การใช้เงื่อนไข IF, AND, OR ซับซ้อนหลายขั้น แต่เท่าที่ทราบจะมีแค่ Trueกับ False (2ทางเลือก แต่ต้องการข้อมูลมากกว่า 2 ทางเลือก มีตัวอย่างตาม File แนบ

  2. #2
    Forum Admin สมเกียรติ's Avatar
    Join Date
    May 2007
    Location
    Excel Expert Training
    Job
    MS Excel Instructor
    Version
    Excel 2010/Windows 7
    Posts
    6,817
    Blog Entries
    5

    Default

    ให้นำเงื่อนไขมาใส่เป็นตารางแล้วใช้สูตร

    =IF(ISNA(VLOOKUP(O8,$T$8:$U$13,2,0)),"ผ่าน",VLOOKUP(O8,$T$8:$U$13,2,0))

    แนะนำให้แนบแฟ้ม xls รุ่นเก่าดีกว่าครับ เพราะส่วนใหญ่ยังไม่ใช้ 2007 กัน เว้นแต่ว่าคำถามเกี่ยวข้องกับของใหม่ๆใน 2007 ก็จำเป็น

  3. #3

    Join Date
    Apr 2009
    Location
    Home Product Center PCL.
    Job
    เจ้าหน้าที่ฝึกอบรม ฝ่ายวางแผนและประเมินผล
    Version
    Excel 2003/windows xp=ที่ออฟฟิต, Excel 2007/Windows xp=ที่บ้าน
    Posts
    4

    Icon5 การแสดงข้อความโดยใช้ IF หลายชั้น

    เรียนอาจารย์ สมเกียรติคะ
    จากตัวอย่างที่อาจารย์เเนะนำให้นั้น หนูคิดว่ายังไม่ตรงตามที่ต้องการ แต่จะนำไปประยุกต์ใช้ในเรื่องอื่นแทน หนูจึงได้ส่งรายละเอียดมาให้อาจารย์ และสมาชิกทุกท่าน ช่วยแนะนำอีกครั้งคะ

    จากข้อมูล ให้ A2 = "SM/ASM" โดยที่ B2 = "มากว่า หรือเท่ากับ 90" และต้องการให้ C2 = "ผ่าน"
    โดยมีเงื่อนไข ดังนี้ ถ้า Column A เป็น "SM/ASM" แล้วคะแนนใน Column B เท่ากับ "90 - 100" ให้ Column C เป็น "ผ่าน" หรือ Column B เท่ากับ "85 - 89.9" ให้ Column C เป็น "ซ่อม" หรือ Column B เท่ากับ "น้อยกว่าหรือเท่ากับ 84.9" ให้ Column C เป็น "เรียนใหม่" หรือ ถ้า Column A เป็น "Staff" แล้วคะแนนใน Column B เท่ากับ "85 - 100" ให้ Column C เป็น "ผ่าน" หรือ Column B เท่ากับ "80 – 84.9" ให้ Column C เป็น "ซ่อม" หรือ Column B เท่ากับ "น้อยกว่าหรือเท่ากับ 80" ให้ Column C เป็น "เรียนใหม่" หรือ ถ้า Column A เป็น "Trainee" แล้วคะแนนใน Column B เท่ากับ "85 - 100" ให้ Column C เป็น "ผ่าน" หรือ Column B เท่ากับ "80 – 84.9" ให้ Column C เป็น "ซ่อม" หรือ Column B เท่ากับ "น้อยกว่าหรือเท่ากับ 80" ให้ Column C เป็น "ไม่จบโครงการ" :bang: :bang: :bang:

  4. #4
    Excel Expert Volunteer zv735's Avatar
    Join Date
    May 2007
    Location
    กทม
    Job
    ด้านสต๊อกสินค้า
    Version
    Excel 2003 Windows XP
    Posts
    405
    Blog Entries
    1

    Default อย่างนี้ได้หรือเปล่าครับ

    {=INDEX($L$7:$L$15,MATCH(A2&B2,$J$7:$J$15&$K$7:$K$15))}
    เป็นสูตร Array ต้องกด Shift+Ctrl+Enter แทน Enter ธรรมดานะครับ
    ลองดู File แนบนะครับ
    ขอบคุณครับ

  5. #5

    Join Date
    Apr 2009
    Location
    Home Product Center PCL.
    Job
    เจ้าหน้าที่ฝึกอบรม ฝ่ายวางแผนและประเมินผล
    Version
    Excel 2003/windows xp=ที่ออฟฟิต, Excel 2007/Windows xp=ที่บ้าน
    Posts
    4

    ขอบคุณมากมาย

    ขอขอบคุณ zv735 มากมายนะค่ะ ดูแล้วง่ายจัง แต่ทำไมเราถึงได้ทำให้มันดูยากและซับซ้อนก็ไม่รู้ บังเอิญไม่ค่อยเก่ง Excel ด้วย แต่ชอบที่จะค้นหา, ลองผิดลองถูกไปเลย โชคดีมากเลยที่เรามาเจอ Web ดีๆ แบบนี้

    จากตัวอย่างที่ zv735 ให้มามันเวิร์ค มากๆ คะ แต่ติดปัญหาอยู่นิดหนึ่ง คือ หาก Column B = 100.00 เมื่อใด การแสดงผลของ Column C จะผิดทันที แต่ไม่เป็นไรคะ เราจะลองแก้ไขหรือประยุกต์ใช้ไปเรื่อยๆ คะ

    Thank, : )
    janhom_amp

  6. #6
    Excel Expert Volunteer zv735's Avatar
    Join Date
    May 2007
    Location
    กทม
    Job
    ด้านสต๊อกสินค้า
    Version
    Excel 2003 Windows XP
    Posts
    405
    Blog Entries
    1

    Default ใช่จริงๆด้วยครับ

    ใช่จริงๆด้วยครับ ผมเองก็ไม่รู้จะแก้ยังไงครับ ลองดูผู้รู้ท่านอื่นนะครับ
    ผมแก้ปัญหาเฉพาะหน้าให้ก่อนโดยใช้ If ดัก Error ครับ
    =IF(B2=100,"ผ่าน",INDEX($L$7:$L$15,MATCH(A2&B2,$J$7:$J$15&$K$7:$K$15)))
    ลองดู File แนบนะครับ

    ขอบคุณครับ

  7. #7

    Join Date
    Apr 2009
    Location
    Home Product Center PCL.
    Job
    เจ้าหน้าที่ฝึกอบรม ฝ่ายวางแผนและประเมินผล
    Version
    Excel 2003/windows xp=ที่ออฟฟิต, Excel 2007/Windows xp=ที่บ้าน
    Posts
    4

    Default

    มันใช้ได้ดีทีเดียวคะ
    "ขอบคุณมากมายอีกครั้งนะค่ะ"

    เดี๋ยวครั้งหน้าจะนำปัญหาอื่นมาถามอีกคะ

  8. #8
    Excel Expert Volunteer
    Join Date
    Jan 2009
    Location
    เชียงใหม่
    Job
    วางแผน
    Version
    Excel 2003/Windows XP
    Posts
    78

    Default ช่วยแก้ไขครับ

    ขออนุญาตคุณ ZV735 นะครับ
    ขอแก้ไขสูตรของคุณ ZV735 เพิ่มเป็น
    =INDEX($L$7:$L$15,MATCH(A2&TEXT(B2,"000"),$J$7:$J$15&TEXT($K$7:$K$15,"000")))

    ตามไฟล์แนบครับ

    ขอบคุณครับ*:-)

  9. #9
    Excel Expert Volunteer เอก's Avatar
    Join Date
    May 2007
    Location
    ลาดกระบัง กรุงเทพฯ
    Job
    ธุรกิจส่วนตัว อาจารย์พิเศษ วิทยากร ที่ปรึกษาองค์กร นักเขียน "ขออนุญาตไม่ทำไฟล์ตัวอย่าง สำหรับคำถามที่ไม่แนบไฟล์ตัวอย่าง"
    Version
    Excel 2003/2007/2010/2013/OpenOffice/LibreOffice and Windows XP/Windows 7
    Posts
    1,561

    Default

    ผมใช้วิธีสร้างตารางเงื่อนไขขึ้นมา แล้วใช้ VLOOKUP เพื่อแสดงข้อมูล ดังนี้

    =VLOOKUP(B2,J7:M11,MATCH(A2,J7:M7,0)) หรือ

    =IF(ISBLANK(B2),"",VLOOKUP(B2,J7:M11,MATCH(A2,J7:M7,0)))

    ลองดูในไฟล์แนบนะครับ

  10. #10
    Excel Expert Volunteer zv735's Avatar
    Join Date
    May 2007
    Location
    กทม
    Job
    ด้านสต๊อกสินค้า
    Version
    Excel 2003 Windows XP
    Posts
    405
    Blog Entries
    1

    Default ได้ความรู้เพิ่มอีกแล้วครับ

    ได้ความรู้เพิ่มอีกแล้ว ดีใจจังเลย
    ขอบคุณ คุณchansit กับ คุณเอก มากครับผม

  11. #11
    Excel Expert Volunteer worachai_p's Avatar
    Join Date
    May 2007
    Location
    กรุงเทพฯ
    Job
    งานบัญชี,Internal Audit,ที่ปรึกษาวางระบบงานบัญชี,ERP,ระบบงานภายในองค์กร
    Version
    Excel 2003, 2007,2010/ Windows XP SP3
    Posts
    315
    Blog Entries
    1

    Default

    ขออนุญาตคุณ ZV735 และ chansit ที่นำสูตรไปปรับปรุงใหม่ครับ

    โดยส่วนตัวแล้วพยายามที่จะเลี่ยงการใช้ Match กับ Index ด้วยเหตุเพราะว่า

    ต้องใช้เวลาในการประมวลผลช้า จึงหันมาใช้ Offset กับ Match แทน ซึ่งส่วนตัว

    เห็นว่าเร็วกว่าและได้ผลลัพธ์เท่ากัน จึงแนะนำเพิ่มอีกช่องทางครับ

    {=OFFSET($L$6,MATCH(A2&TEXT(B2,"000"),$J$7:$J$15&TEXT($K$7:$K$15,"000")),0)}

    ปล.อย่าลืมกด Shift+Ctrl+Enter แทน Enter นะครับ

  12. #12
    Excel Expert Volunteer
    Join Date
    Jan 2009
    Location
    เชียงใหม่
    Job
    วางแผน
    Version
    Excel 2003/Windows XP
    Posts
    78

    Default

    ขอบคุณครับคุณworachai_p
    ผมจะได้นำไปป็นความรู้ด้วยครับ:great:

  13. #13
    Forum Admin สมเกียรติ's Avatar
    Join Date
    May 2007
    Location
    Excel Expert Training
    Job
    MS Excel Instructor
    Version
    Excel 2010/Windows 7
    Posts
    6,817
    Blog Entries
    5

    Default

    Quote Originally Posted by worachai_p View Post
    โดยส่วนตัวแล้วพยายามที่จะเลี่ยงการใช้ Match กับ Index ด้วยเหตุเพราะว่า

    ต้องใช้เวลาในการประมวลผลช้า จึงหันมาใช้ Offset กับ Match แทน ซึ่งส่วนตัว

    เห็นว่าเร็วกว่าและได้ผลลัพธ์เท่ากัน
    Offset เป็นสูตรกลุ่ม Volatile ที่จะคำนวณใหม่เองเสมอเมื่อเซลล์อื่นแม้ไม่เกี่ยวข้องกันมีการเปลี่ยนแปลง และถ้าใช้ link ข้ามแฟ้มจะต้องเปิดแฟ้มต้นทางด้วยเสมอครับ

    ผมชอบใช้ Offset เพราะไม่จำเป็นต้องกำหนดขอบเขตพื้นที่ตารางไว้ในสูตร ต่างจาก Index ที่ต้องระบุขอบเขตไว้เสมอ

    Index จะทำงานได้เร็วขึ้น ถ้าใช้สูตรแบบแนวเดียว เช่น
    =Index(A1:A100, ตัวที่)
    หรือ
    =Index(A1:Z1, ตัวที่)

    เพื่อทราบครับ

  14. #14
    Excel Expert Volunteer zv735's Avatar
    Join Date
    May 2007
    Location
    กทม
    Job
    ด้านสต๊อกสินค้า
    Version
    Excel 2003 Windows XP
    Posts
    405
    Blog Entries
    1

    Default ขอบคุณครับ

    ได้ความรู้เพิ่มอีกแล้ว
    จะลองแก้ปัญหาโดยใช้ Offset มากขึ้นเพื่อเปรียบเทียบดูครับ

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

  15. #15
    Excel Expert Volunteer worachai_p's Avatar
    Join Date
    May 2007
    Location
    กรุงเทพฯ
    Job
    งานบัญชี,Internal Audit,ที่ปรึกษาวางระบบงานบัญชี,ERP,ระบบงานภายในองค์กร
    Version
    Excel 2003, 2007,2010/ Windows XP SP3
    Posts
    315
    Blog Entries
    1

    Default

    ขอบคุณ อ.สมเกียรติ ที่ช่วยขยายความเข้าใจมากครับ

    เพราะเดิมใช้ด้วยความคุ้นเคยแต่ยังไม่ได้หาเหตุผลที่เป็นทางการได้

  16. #16

    Join Date
    Jun 2007
    Location
    990 ถ.พระราม 4 แขวงสีลม เขตบางรัก กทม.10500
    Job
    งานด้านธุรการ ฝ่ายขาย
    Version
    excel 2007 / windows XP
    Posts
    28

    Default ลองทำแบบง่าย ๆ ดูค่ะ

    ลองนำไฟล์ไปทำดูค่ะ อาจารย์ ดิฉันชอบแบบง่าย ๆ ค่ะ ยังไงก็เจ้าของกระทู้ลองไปดูนะคะ แปลงเป็น 2003 แล้วค่ะ ยังไงก็ช่วยแนะนำด้วยค่ะ

  17. #17
    Excel Expert Volunteer เอก's Avatar
    Join Date
    May 2007
    Location
    ลาดกระบัง กรุงเทพฯ
    Job
    ธุรกิจส่วนตัว อาจารย์พิเศษ วิทยากร ที่ปรึกษาองค์กร นักเขียน "ขออนุญาตไม่ทำไฟล์ตัวอย่าง สำหรับคำถามที่ไม่แนบไฟล์ตัวอย่าง"
    Version
    Excel 2003/2007/2010/2013/OpenOffice/LibreOffice and Windows XP/Windows 7
    Posts
    1,561

    Default

    โดยความเห็นส่วนตัวคิดว่า คอลัมน์ Index ไม่จำเป็นต้องมีก็ได้, มีการตั้งชื่อย่อ เพื่อเอามาใช้บอกสาขา ก็ไม่น่าจำเป็น, ตารางใน condition ก็ไม่จำเป็นต้องมี 79.99 เพราะเราใช้ vlookup แบบไม่เจาะจงอยู่แล้ว
    ผมจึงทำการปรับปรุงชื่อข้อมูลบางชื่อเสียใหม่, แก้ไขสูตรในคอลัมน์สุดท้ายในตารางนิดหน่อย, และสำหรับคนที่สอบผ่านในรอบแรกแล้ว ก็ไม่จำเป็นต้องสอบใหม่ ผมก็เลยระบายช่องคะแนนสอบครั้งที่สอง สำหรับคนที่สอบผ่านซะเลย ลองดูในไฟล์แนบครับ

    สำหรับสูตรในคอลัมน์ที่อยู่นอกตาราง ไม่ทราบว่ามีไว้เพื่ออะไร แกะดูก็ไม่ค่อยเข้าใจ จะลองปรับปรุงให้ใหม่ แต่ก็ไม่รู้ว่าต้องการอะไร และที่สำคัญผมคิดว่า สูตรนี้ยาวเกินไป แต่ถ้าจะทำให้สูตรสั้นลง ก็ลองแก้ตามสีที่ผมแยกไว้
    =IF(OR(AND(I8="1",I8="2"),VALUE(N8)>90,),"OK",)&(IF(OR(AND(I8="1",I8="2"),VALUE(N8)<=89.9,),"Again")&IF(OR(AND(I8="1",I8="2"),IF(N8>90,"OK","No")<=85,),"Fail"))

    ส่วนที่สามารถแก้ไขให้สั้นลงได้ มีดังนี้
    AND(I8="1",I8="2") แก้เป็น I8<=2
    VALUE(N8)>90, แก้เป็น N8>=90
    VALUE(N8)<=89.9, แก้เป็น N8<90

    ในเบื้องต้น สูตรก็จะสั้นลง เป็นแบบนี้
    =IF(OR(I8<=2,N8>=90),"OK",)&(IF(OR(I8<=2,N8<90),"Again")&IF(OR(I8<=2,IF(N8>90,"OK","No")<=85,),"Fail"))
    แต่ท่อนสุดท้ายนี้ ไม่เข้าใจจริงๆ ครับ
    และรู้สึกว่าผลลัพธ์ที่ได้ก็ทะแม่งๆ อยู่
    ยินดีที่ได้แลกเปลี่ยนความคิดเห็นกันครับ

  18. #18
    Excel Expert Volunteer vajra's Avatar
    Join Date
    May 2007
    Location
    Nakorn si thammarat
    Job
    freelance
    Version
    Excel 2007 Windows 7
    Posts
    822
    Blog Entries
    13

    Default

    เห็นว่ามีผู้ตอบหลายท่านแวะเข้ามาดู

    เป็นประเด็นที่น่าสนใจทีเดียวครับ

    ลองทำตามที่เข้าใจ แล้วดูเหมือนว่าจะคล้ายๆกับหลายท่าน

    สูตรที่ใช้คือ

    =OFFSET(ref,MATCH(TRUE,LogicCalc,0),1)
    และ

    =AND(H2=Postn,Score>=I2)
    ได้แนบไฟล์มาด้วยดรับ

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •