Page 1 of 1

List รายการแบบหลาย Condition

Posted: Sun Nov 03, 2019 9:03 am
by Peterkrubpom
เรียน ปรึกษาอาจารย์ครับ ผมต้องการ List รายการออกมาต่อกัน โดยมี 3 Condition
1. เป็นการแนะนำด้วยรหัสตั้งต้น และมีฝั่งกำหนด โดยมีชั้นที่มากกว่ารหัสสมาชิกที่สนใจ
2.เป็นรหัสสมาชิกที่สนใจ (G2) เป็นรหัสแนะนำ โดยไม่สนใจฝั่ง แต่มีชั้นที่มากกว่าชั้นที่ ตัวเองอยู่ เช่น 0000000002 อยู่ชั้นที่ 1 ก็ให้ไปหาค่ารหัสสมาชิกที่ 0000000002 แนะนำแต่อยู่ชั้นที่ 2
3. หารหัสสมาชิกที่แนะนำต่อ เช่นรหัสสมาชิก 0000000002 แนะนำรหัส 0000000013 ก็เข้ามาเรียงต่อ และหากรหัส 0000000013 ไปแนะนำท่านไหนต่อก็มา List ต่อเนื่องกันไปครับ
สิ่งที่ต้องการคือ List รหัสสมาชิกออกมา โดยพิจารณาจาก ข้อ 1-3 ครับผม รวมกัน

โดยผมแนบตัวอย่างไว้ในเอกสารแนบครับผม และใส่คำถามไว้ข้างในด้วยครับ

ช่วยแนะนำด้วยครับผม

Re: List รายการแบบหลาย Condition

Posted: Sun Nov 03, 2019 9:29 am
by puriwutpokin
Peterkrubpom wrote: Sun Nov 03, 2019 9:03 am เรียน ปรึกษาอาจารย์ครับ ผมต้องการ List รายการออกมาต่อกัน โดยมี 3 Condition
1. เป็นการแนะนำด้วยรหัสตั้งต้น และมีฝั่งกำหนด โดยมีชั้นที่มากกว่ารหัสสมาชิกที่สนใจ
2.เป็นรหัสสมาชิกที่สนใจ (G2) เป็นรหัสแนะนำ โดยไม่สนใจฝั่ง แต่มีชั้นที่มากกว่าชั้นที่ ตัวเองอยู่ เช่น 0000000002 อยู่ชั้นที่ 1 ก็ให้ไปหาค่ารหัสสมาชิกที่ 0000000002 แนะนำแต่อยู่ชั้นที่ 2
3. หารหัสสมาชิกที่แนะนำต่อ เช่นรหัสสมาชิก 0000000002 แนะนำรหัส 0000000013 ก็เข้ามาเรียงต่อ และหากรหัส 0000000013 ไปแนะนำท่านไหนต่อก็มา List ต่อเนื่องกันไปครับ
สิ่งที่ต้องการคือ List รหัสสมาชิกออกมา โดยพิจารณาจาก ข้อ 1-3 ครับผม รวมกัน

โดยผมแนบตัวอย่างไว้ในเอกสารแนบครับผม และใส่คำถามไว้ข้างในด้วยครับ

ช่วยแนะนำด้วยครับผม
ลองทำตัวอย่างของคำตอบที่ต้องการมาดูด้วยครับ จะได้เข้าใจตรงกันครับ แล้ว สูตรที่ลิ้งค์มา มีส่วนเกียวข้องอย่างไรครับ

Re: List รายการแบบหลาย Condition

Posted: Sun Nov 03, 2019 9:47 am
by Peterkrubpom
เรียน อาจารย์ครับ
- สูตรที่ติดไปด้วย ผมน่าจะลืมเอาออกครับ
- ผมลัพท์ที่ต้องจากมันจะเรียงรหัส
0000000008 (เพราะ 000000001 แนะนำอยู่ขวามือ และชั้นสูงกว่า 0000000002)
0000000009 (เพราะ 0000000008 แนะนำ ไม่เดี่ยวกับฝั่ง)
0000000010 (เพราะ 000000001 แนะนำอยู่ขวามือ และชั้นสูงกว่า 0000000002)
0000000011 (เพราะ 0000000002 แนะนำและอยู่ชั้นที่มากกว่า)

ส่วน 0000000003-0000000007 ไม่อยู่ใน Condition

ขอบพระคุณมากครับอาจารย์

Re: List รายการแบบหลาย Condition

Posted: Sun Nov 03, 2019 10:09 am
by Peterkrubpom
ผมพยายามใช้สูตร match(1,(....)*(....),0) และใช้สูตร List รายการเข้าไปสวมแต่มัน error นะครับ

Re: List รายการแบบหลาย Condition

Posted: Sun Nov 03, 2019 10:26 am
by snasui
Peterkrubpom wrote: Sun Nov 03, 2019 9:47 am เรียน อาจารย์ครับ
- สูตรที่ติดไปด้วย ผมน่าจะลืมเอาออกครับ
- ผมลัพท์ที่ต้องจากมันจะเรียงรหัส
0000000008 (เพราะ 000000001 แนะนำอยู่ขวามือ และชั้นสูงกว่า 0000000002)
0000000009 (เพราะ 0000000008 แนะนำ ไม่เดี่ยวกับฝั่ง)
0000000010 (เพราะ 000000001 แนะนำอยู่ขวามือ และชั้นสูงกว่า 0000000002)
0000000011 (เพราะ 0000000002 แนะนำและอยู่ชั้นที่มากกว่า)

ส่วน 0000000003-0000000007 ไม่อยู่ใน Condition

ขอบพระคุณมากครับอาจารย์
:D ทำตัวอย่างให้ถูกต้องตรงกับที่ต้องการแล้วแนบไฟล์มาใหม่ กรณีต้องการข้อมูลใดมาเป็นเงื่อนไข ข้อมูลนั้นจะต้องมีอยู่ใน Database ด้วย ไม่เช่นนั้นจะหาคำตอบให้ไม่ได้ครับ

Re: List รายการแบบหลาย Condition

Posted: Sun Nov 03, 2019 11:14 am
by Peterkrubpom
ได้ครับอาจารย์ เดี๋ยวผมแก้ไขใหม่ครับ

Re: List รายการแบบหลาย Condition

Posted: Sun Nov 03, 2019 6:18 pm
by Peterkrubpom
เรียน อาจารย์ครับ ผมแนบ File มาให้ใหม่แล้วครับ สิ่งที่ต้องการคือตัวที่เป็น Highlight สีเขียวครับผม ขอบพระคุณมากครับผม

Re: List รายการแบบหลาย Condition

Posted: Sun Nov 03, 2019 8:34 pm
by snasui
:D ผมอ่านแล้วจับความสัมพันธ์ของข้อมูลไม่ได้ว่านำมาแสดงอย่างไร เพราะไม่ได้เป็นการ Lookup ต่อเนื่องกันไป คงต้องรอผู้ที่เข้าใจมาช่วยตอบครับ

Re: List รายการแบบหลาย Condition

Posted: Sun Nov 03, 2019 9:33 pm
by Peterkrubpom
อาจารย์ พออธิบายเรื่องการ List รายการไม่ซ้ำ ตามสูตรแบบนี้ไหมครับ ผมอาจจะเอามา Adapt นะครับผม IFERROR(INDEX($Z$4:$Z$23,SMALL(IF(ISNUMBER(MATCH($X$4:$X$23,$T$3:T6,0)),ROW($X$4:$X$23)-ROW($X$4)+1),ROWS(T$4:T7))),"")

ผมไม่เข้าใจ
1. small
2. isnumber
3. row

เพราะผมอยากเอาสูตรนี้มาใส่ match 3 conditions เพื่อ List รายการมานะครับผม

Re: List รายการแบบหลาย Condition

Posted: Sun Nov 03, 2019 9:47 pm
by snasui
:D ตัวอย่างการแปลสูตรครับ

จากสูตร IFERROR(INDEX($Z$4:$Z$23,SMALL(IF(ISNUMBER(MATCH($X$4:$X$23,$T$3:T6,0)),ROW($X$4:$X$23)-ROW($X$4)+1),ROWS(T$4:T7))),"") แปลว่า

หาก INDEX($Z$4:$Z$23,SMALL(IF(ISNUMBER(MATCH($X$4:$X$23,$T$3:T6,0)),ROW($X$4:$X$23)-ROW($X$4)+1),ROWS(T$4:T7))) ได้ผลลัพธ์เป็นค่าผิดพลาดให้แสดงค่าว่าง

จากสูตร INDEX($Z$4:$Z$23,SMALL(IF(ISNUMBER(MATCH($X$4:$X$23,$T$3:T6,0)),ROW($X$4:$X$23)-ROW($X$4)+1),ROWS(T$4:T7))) แปลว่า จากช่วงเซลล์ $Z$4:$Z$23 ให้นำลำดับที่เป็นผลลัพธ์ของ SMALL(IF(ISNUMBER(MATCH($X$4:$X$23,$T$3:T6,0)),ROW($X$4:$X$23)-ROW($X$4)+1),ROWS(T$4:T7)) มาแสดง

จากสูตร SMALL(IF(ISNUMBER(MATCH($X$4:$X$23,$T$3:T6,0)),ROW($X$4:$X$23)-ROW($X$4)+1),ROWS(T$4:T7)) แปลว่า ให้หาค่าที่น้อยที่สุดในช่วง IF(ISNUMBER(MATCH($X$4:$X$23,$T$3:T6,0)),ROW($X$4:$X$23)-ROW($X$4)+1) เป็นลำดับที่ ROWS(T$4:T7) ขยายวามได้ว่า หาก ROWS(T$4:T7) มีค่าเป็น 1 ก็หาค่าที่น้อยที่สุดเป็นลำดับที่ 1 ถ้าเป็น 10 ก็หมายถึงให้หาค่าที่น้อยที่สุดเป็นลำดับที่ 10 เป็นต้น

จาก IF(ISNUMBER(MATCH($X$4:$X$23,$T$3:T6,0)),ROW($X$4:$X$23)-ROW($X$4)+1) แปลว่า ถ้า ISNUMBER(MATCH($X$4:$X$23,$T$3:T6,0)) เป็นจริงให้แสดงผลลัพธ์ของ ROW($X$4:$X$23)-ROW($X$4)+1

จาก ISNUMBER(MATCH($X$4:$X$23,$T$3:T6,0)) แปลว่า MATCH($X$4:$X$23,$T$3:T6,0) เป็นตัวเลขใช่หรือไม่ หากใช่แสดงค่า True หากไม่ใช่แสดงค่า False

จากสูตร MATCH($X$4:$X$23,$T$3:T6,0) แปลว่า ให้หา $X$4:$X$23 ว่าอยู่ในำลำดับที่เท่าไรของ $T$3:T6 ลักษณะการค้นจะเป็นแบบด้านล่าง

X4 อยู่ในลำดับที่เท่าไรของ T3:T6
X5 อยู่ในลำดับที่เท่าไรของ T3:T6
...
X23 อยู่ในลำดับที่เท่าไรของ T3:T6

หากพบจะแสดงค่าลำดับที่พบ หากไม่พบจะแสดง #N/A

จากสูตร ROW($X$4:$X$23)-ROW($X$4)+1 หมายถึงให้แสดงค่าลำดับเริ่มจากเลข 1 เป็นต้นไป โดยค่าลำดับสิ้นสุดจะมีขนาดเท่ากับจำนวนบรรทัดในช่วง ROW($X$4:$X$23) ขยายความได้ว่า ถ้า ROW($X$4:$X$23) มี 20 บรรทัดก็จะแสดงค่าลำดับจาก 1-20

การแปลสูตรจะแปลจากสูตรนอกสุดไปสูตรที่อยู่ด้านในสุด การแทนค่าจะแทนค่าจากสูตรในสุดออกไปสูตรที่อยู่ด้านนอกสุด สูตรที่อยู่ด้านในจะส่งค่าไปคำนวณต่อที่สูตรที่อยู่ด้านนอก

ค่อย ๆ ทำความเข้าใจครับ

Re: List รายการแบบหลาย Condition

Posted: Sun Nov 03, 2019 10:09 pm
by Peterkrubpom
ขอบพระคุณมากครับผม