หน้าเว็บ

วันพฤหัสบดีที่ 22 กรกฎาคม พ.ศ. 2553

การสุ่มโดยไม่เอาค่าซ้ำแบบ Advanced

เราทราบการสุ่มจากค่าทั้งหมดโดยไม่เอาค่าที่ซ้ำ จากหัวข้อการสุ่มโดยไม่เอาค่าซ้ำอย่างง่ายมาแล้ว ในหัวข้อนี้มาดูการสุ่มค่าจากค่าทั้งหมดโดยไม่เอาค่าที่ซ้ำแบบ Advanced กันบ้าง

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

สมมุติต้องการสุ่มรายชื่อจาก A2:A11 มา 3 รายชื่อ

ที่ B2 คีย์

=INDEX($A$2:$A$11,SMALL(IF(COUNTIF($B$1:B1,$A$2:$A$11)=0,ROW($A$2:$A$11)-ROW($A$2)+1),INT(RAND()*ROWS(A2:$A$11)+1)))

Ctrl+Shift+Enter > Copy ไปถึง B4 ก็จะได้ 3 ค่าที่ไม่ซ้ำจากค่าทั้งหมดตามที่ต้องการ ลองกดแป้น F9 สังเกตการเปลี่ยนแปลง

ภาพตัวอย่างการสุ่มโดยไม่เอาค่าซ้ำแบบ Advanced

AdvancedRandom

5 ความคิดเห็น:

ไม่ระบุชื่อ กล่าวว่า...

ถ้ามีทั้งหมด 4 คอภัมภ์
อยากได้แบบสุ่มมาทั้งแถวเลย จะทำอย่างไรคะ

snasui กล่าวว่า...

สุ่มคอลัมน์แรกขึ้นมาก่อนแล้วใช้ค่าจากคอลัมน์แรกนั้นดึงข้อมูลคอลัมน์อื่น ๆ มาแสดง สำหรับวิธีการที่ละเอียดกว่านี้ให้ส่งตัวอย่างไปที่ http://www.snasui.com/ จะช่วยดูให้ครับ

ไม่ระบุชื่อ กล่าวว่า...

นั่นแหละค่า ปัญหาคือดึงยังไง
ขอบคุณมากๆ คะ

ไม่ระบุชื่อ กล่าวว่า...

copy สูตรแล้ว ทำไมขึ้นเป็น #NUM! ครับ

snasui กล่าวว่า...

ให้นำตัวอย่างไปถามที http://www.snasui.com จะได้สะดวกในการตอบ

เบื้องต้นลองตรวจสอบว่าสูตรเป็น Array คือมีปีกกาครอบแล้วหรือไม่ ถ้าไม่มีให้อ่านบนความซ้ำใหม่อีกครั้งแล้วสังเกตว่าผมบอกให้กดแป้นรับสูตรด้วยวิธีใด