Page 1 of 1
ต้องการ random ชุดข้อมูลไม่ซ้ำกันค่ะ
Posted: Tue Mar 17, 2015 9:14 am
by lemony
ตั้งการจัดผังที่นั่งรายชื่อ ของแต่ละโต๊ะ ให้ไม่ซ้ำกัน ให้รายชื่อมาโชว์ตรงไฮไลท์สีเหลืองในไฟล์แนบค่ะ
ไม่ทราบว่าจะต้องเขียนรูปแบบไหนคะ
Re: ต้องการ random ชุดข้อมูลไม่ซ้ำกันค่ะ
Posted: Tue Mar 17, 2015 2:26 pm
by DhitiBank
ทดลองดูตามไฟล์แนบครับ กดปุ่ม F9 ไปเรื่อยๆ จะเป็นการสุ่มครับ
random.xlsx
Re: ต้องการ random ชุดข้อมูลไม่ซ้ำกันค่ะ
Posted: Tue Mar 17, 2015 4:29 pm
by lemony
เรียน ถามอาจารย์ค่ะ ไม่เข้าใจสูตร
IF(ROWS($P$2:P2)>$N$2,"",IF(SUM($P$1:P1)=12,0,
IF(AND(COUNTIF($O$1:O1,">"&0.85)<12,O2>0.85),1,
IF(AND(ROWS($P$2:P2)>$N$2-$M$2,SUM($P$1:P1)<12),1,0))))
และ สูตรนี้ค่ะ
IF(INDEX($P$2:$P$97,ROW()-1+(COLUMN()-4)*12)=0,"",INDEX($A$2:$A$13,MATCH(SUM($P$2:INDEX($P$2:$P$97,ROW()-1+(COLUMN()-4)*12)),$B$2:$B$13,0)))
อาจารย์ช่วยอธิบายให้หน่อยได้ไหมคะ ขอบคุณค่ะ
Re: ต้องการ random ชุดข้อมูลไม่ซ้ำกันค่ะ
Posted: Tue Mar 17, 2015 5:04 pm
by DhitiBank
ได้ครับ เดี๋ยวถึงบ้านแล้วจะเขียนอธิบายให้ครับ
(เรียกชื่อผมก็พอครับ ผมไม่ใช่อาจารย์ พอดีเคยเจอปัญหาแนวนี้เลยพอช่วยเหลือได้ครับ)
Re: ต้องการ random ชุดข้อมูลไม่ซ้ำกันค่ะ
Posted: Tue Mar 17, 2015 6:05 pm
by DhitiBank
1. สูตรแรกจุดประสงค์เพื่อเลือกตำแหน่งที่นั่งครับ ที่นั่งที่ถูกเลือกจะแสดงเลข 1 โดยเงื่อนไขจากสูตร:
--IF(ROWS($P$2:P2)>$N$2,"",...)
หากสูตรนี้มีอันดับ (แสดงด้วยจำนวนแถว) > จำนวนที่นั่ง ให้แสดงค่าว่าง คือ ถ้าไล่ลงมาเกิน 96 ที่นั่งแล้ว ก็พอ
--IF(SUM($P$1:P1)=12,0,...)
หากไม่เกิน 96 ก็ให้รวมที่นั่งที่ถูกเลือกก่อนว่า ได้ 12 ที่หรือยัง หากได้แล้ว ให้แสดง 0 หากยังก็ไปทำเงื่อนไขต่อไป
--IF(AND(COUNTIF($O$1:O1,">"&0.85)<12,O2>0.85),1,...)
เงื่อนไขนี้จะเป็นตัวเลือกที่นั่งขั้นที่ 1 คือ จะเลือกจากค่าที่สุ่มในคอลัมน์ O หาก > 0.85 ก็ให้เลือก (ที่เอา 0.85 เพราะเห็นว่าต้องการแค่ 12 ที่ซึ่งค่อนข้างน้อยเมื่อเทียบกับที่นั่งทั้งหมด เลยเลือกที่ความน่าจะเป็นต่ำหน่อยครับ)
--IF(AND(ROWS($P$2:P2)>$N$2-$M$2,SUM($P$1:P1)<12),1,0)
เงื่อนไขสุดท้าย เป็นการเลือกขั้นที่ 2 เผื่อเงื่อนไขแรก ที่นั่งที่มีค่าสุ่มเกิน 0.85 มีไม่ถึง 12 ที่นั่ง จึงกำหนดอันนี้สำรองเอาไว้โดย หากแถวนั้นเป็นที่นั่งตั้งแต่ที่ 84 ขึ้นไป และที่นั่งที่ถูกเลือกไปแล้ว ยัง <12 ก็ให้ที่นั่งนั้นถูกเลือก (แสดง 1) (AND จะเป็นจริงได้ เงื่อนไขภายในต้องจริงทั้งหมดครับ)
แค่นี้ก่อนนะครับ พอดีต้องขับรถ
Re: ต้องการ random ชุดข้อมูลไม่ซ้ำกันค่ะ
Posted: Tue Mar 17, 2015 8:24 pm
by DhitiBank
2. ส่วนสูตรที่สอง เป็นการเอาที่นั่งที่ถูกเลือก (1) มาจับคู่กับชื่อครับ โดยถ้าดูจากสูตร
--IF(INDEX($P$2:$P$97,ROW()-1+(COLUMN()-4)*12)=0,"",...)
สูตรนี้มีเงื่อนไขคือ หากที่นั่งตำแหน่งนั้นไม่ถูกเลือก (ค่าเป็น 0) ก็ให้แสดงค่าว่าง โดยหาว่า 0 หรือไม่จากสูตร INDEX ครับ โดยตำแหน่งของที่นั่งในตารางเหลืองจะสัมพันธ์กับการเลือกที่นั่งในคอลัมน์ P เนื่องจากในส่วน
ROW()-1+(COLUMN()-4)*12) ==> เป็นการให้ลำดับที่นั่งในตารางเหลืองครับ หากลองคำนวณดูแล้วจะได้ดังนี้
1 13 25 37 ... 85
2 14 26 36 ... 87
...
12 24 36 48 ... 96
ที่นั่งตรงไหนที่ในคอลัมน์ P มีค่าเป็น 1 ก็จะถูกคำนวณในเงื่อนไขต่อไป
--INDEX($A$2:$A$13,MATCH(SUM($P$2:INDEX($P$2:$P$97,ROW()-1+(COLUMN()-4)*12)),$B$2:$B$13,0))
ที่นั่งที่ถูกเลือก จะมาหาว่าชื่ออะไรจะเป็นคนนั่งโดย
SUM จะหาว่าที่นั่งที่ถูกเลือกนั้น ถูกเลือกเป็นตัวที่เท่าไร (เอา 1 ในคอลัมน์ P มาบวกกันจนถึงที่นั่งตำแหน่งนั้น) ได้ตัวเลขตั้งแต่ 1 - 12
MATCH เอาตัวเลขจาก sum มาจับคู่กับตัวเลขในคอลัมน์ B เพื่อมาเลือกชื่อในสูตร INDEX ครับ
Re: ต้องการ random ชุดข้อมูลไม่ซ้ำกันค่ะ
Posted: Tue Mar 17, 2015 9:52 pm
by DhitiBank
ขอแก้ไขการสุ่มใหม่ครับ เนื่องจากแบบเดิม ดูจะไม่ค่อยเป็นการสุ่มเท่าไรนัก เนื่องจากที่นั่งท้ายๆ จะมีโอกาสน้อยมากที่จะมีคนนั่ง
แบบใหม่นี้จะเป็นการสุ่มจริงๆ ครับ และสามารถเพิ่มชื่อผู้นั่งเข้าไปได้