Page 1 of 1
การสุ่มรายชื่อจับรางวัล
Posted: Fri Apr 15, 2011 5:08 pm
by lek
ผมอ่านบทความวิธีการสุ่มโดยไม่เอาค่าซ้ำอย่างง่ายของอาจารย์สันติพงษ์ โดยใช้สูตรดังนี้
Cell B2 ใส่
=rand()
Cell C2 ใส่
=rank(b2,$B$2:$B$20)
Cell D2 ใส่
=index($A$2:$A$20,MATCH(ROWS($D$2:D2),$C$2:$C$20,0))
ผมได้ลองใช้แล้ว ใช้งานได้ดีครับ
ผมต้องการผลเพิ่มเติมคือ รายชื่อที่ออกไปแล้ว ให้มีปุ่มกดเพื่อนำรายชื่อที่ออกมาแล้วมารวมเป็น list ไว้
รายชื่อที่จะสุ่มต่อไปจะต้องออกมาไม่ซ้ำกับรายชื่อที่ออกไปแล้วครับ
ช่วยแนะนำด้วยครับ
ขอบคุณครับ
เล็ก
Re: การสุ่มรายชื่อจับรางวัล
Posted: Sat Apr 16, 2011 8:05 pm
by snasui
ส่งไฟล์ตัวอย่างมาด้วยครับ การทำเช่นนั้นคิดว่าต้องใช้ VBA ครับ ยกเว้นจะสุ่มขึ้นมาทั้งหมดทีเดียวแบบไม่ซ้ำถึงจะสามารถใช้สูตรในการจัดการได้ครับ
Re: การสุ่มรายชื่อจับรางวัล
Posted: Sat Apr 16, 2011 9:31 pm
by lek
เรียนอาจารย์ครับ
ผมส่งไฟล์มาให้ด้วยแล้วครับ
ขอบคุณครับ
เล็ก
Re: การสุ่มรายชื่อจับรางวัล
Posted: Sun Apr 17, 2011 6:53 am
by snasui
ลองตามไฟล์แนบครับ
วิธีการใช้งาน
1. Copy รายชื่อที่ต้องการสุ่มมาวางที่ Sheet1
2. คลิกปุ่ม Random ที่ชีทแสดงผล โปรแกรมจะแสดงปุ่ม Keep Value มาให้
3. หากต้องการเก็บค่าที่ Random แล้วให้คลิกปุ่ม Keep Value โปรแกรมจะนำค่าที่สุ่มแล้วมาเรียงให้ โดยจะไม่นำค่าที่เก็บไว้นี้มาสุ่มใหม่อีก
Code การสุ่มและการเก็บค่า
Code: Select all
Dim r As Range
Sub RandomName()
Dim i As Integer
Dim j As Integer
With Worksheets("Sheet1")
j = .Range("A65536").End(xlUp).Row - 1
i = Int(Rnd * (j - 1) + 1)
Set r = .Cells(i, 1)
End With
r.Copy
With Worksheets("แสดงผล")
.Range("D7").PasteSpecial xlPasteValues
.Shapes("Button 12").Visible = True
End With
Application.CutCopyMode = False
End Sub
Sub KeepVal()
Dim rs As Range
Dim rt As Range
With Worksheets("แสดงผล")
Set rs = .Range("D7")
If .Range("G7") = "" Then
Set rt = .Range("G7")
Else
Set rt = .Range("G65536").End(xlUp).Offset(1, 0)
End If
rs.Copy
rt.PasteSpecial xlPasteValues
rt.Offset(0, -1) = rt.Offset(-1, -1) + 1
Application.CutCopyMode = False
r.EntireRow.Delete
rs.Select
End With
Worksheets("แสดงผล").Shapes("Button 12").Visible = False
End Sub
Re: การสุ่มรายชื่อจับรางวัล
Posted: Sun Apr 17, 2011 12:15 pm
by lek
ขอบคุณอาจารย์มากครับ
โอเคเลยครับผม
เล็ก
อาจารย์ ครับ ไม่ทราบว่าผมจะเรียนถามเรื่อง Power point ได้ด้วยหรือไม่ครับ
ขอบคุณอีกครั้งครับ
Re: การสุ่มรายชื่อจับรางวัล
Posted: Sun Apr 17, 2011 12:18 pm
by snasui
สามารถสอบถามที่หมวด Talk ได้เลยครับ
Re: การสุ่มรายชื่อจับรางวัล
Posted: Fri Jan 06, 2012 6:50 am
by tahc
ผมเอาไปลองใช้ กดปุ่ม Random แล้วได้ป้ายนี้ ทำไงดีครับ
randomname.jpg
Re: การสุ่มรายชื่อจับรางวัล
Posted: Fri Jan 06, 2012 7:24 am
by snasui
ดูการกำหนดค่า Macro ใหม่ว่ามีการกำหนดค่าไว้อย่างไรโดยเข้าเมนู Tools > Macro > Security > กำหนดเป็น Medium หรือ Low กรณีกำหนดเป็น Medium จะต้องคลิกให้ยอมรับการใช้งาน Macro ทุกครั้ง
จากนั้นปิดไฟล์นั้นไปก่อนแล้วเปิดขึ้นมาเพื่อทดสอบใหม่อีกรอบครับ
Re: การสุ่มรายชื่อจับรางวัล
Posted: Sun Oct 13, 2013 7:51 pm
by dadada0123
ขอบคุณครับ
Re: การสุ่มรายชื่อจับรางวัล
Posted: Wed Aug 27, 2014 1:36 pm
by cupidcool
ขอบคุณอาจารย์มากครับ ผมลองทำตามไฟล์แนบแล้วครับ
ใช้ได้ดีครับ แต่ติดอยู่นิดหน่อยครับ ตรงที่ถ้าเรากด Random จนเหลือคนสุดท้าย
แล้วถ้ากด Random อีกครั้ง มันจะขึ้น Debug ขึ้นมาครับ Error ตรง Set r = .Cells(i, 1)
แต่ไม่น่ามีปัญหาอะไร เพราะยังไงก็เหลือคนสุดท้ายไม่ต้องสุ่มเลือกกับใครอีก
snasui wrote:ลองตามไฟล์แนบครับ
วิธีการใช้งาน
1. Copy รายชื่อที่ต้องการสุ่มมาวางที่ Sheet1
2. คลิกปุ่ม Random ที่ชีทแสดงผล โปรแกรมจะแสดงปุ่ม Keep Value มาให้
3. หากต้องการเก็บค่าที่ Random แล้วให้คลิกปุ่ม Keep Value โปรแกรมจะนำค่าที่สุ่มแล้วมาเรียงให้ โดยจะไม่นำค่าที่เก็บไว้นี้มาสุ่มใหม่อีก
Code การสุ่มและการเก็บค่า
Code: Select all
Dim r As Range
Sub RandomName()
Dim i As Integer
Dim j As Integer
With Worksheets("Sheet1")
j = .Range("A65536").End(xlUp).Row - 1
i = Int(Rnd * (j - 1) + 1)
Set r = .Cells(i, 1)
End With
r.Copy
With Worksheets("แสดงผล")
.Range("D7").PasteSpecial xlPasteValues
.Shapes("Button 12").Visible = True
End With
Application.CutCopyMode = False
End Sub
Sub KeepVal()
Dim rs As Range
Dim rt As Range
With Worksheets("แสดงผล")
Set rs = .Range("D7")
If .Range("G7") = "" Then
Set rt = .Range("G7")
Else
Set rt = .Range("G65536").End(xlUp).Offset(1, 0)
End If
rs.Copy
rt.PasteSpecial xlPasteValues
rt.Offset(0, -1) = rt.Offset(-1, -1) + 1
Application.CutCopyMode = False
r.EntireRow.Delete
rs.Select
End With
Worksheets("แสดงผล").Shapes("Button 12").Visible = False
End Sub
Re: การสุ่มรายชื่อจับรางวัล
Posted: Wed Aug 27, 2014 2:59 pm
by snasui
มีวิธีแก้แบบง่าย ๆ โดยการแทรก
on error resume next
ใต้บรรทัด
dim j as integer
ครับ
Re: การสุ่มรายชื่อจับรางวัล
Posted: Thu Sep 22, 2016 9:20 am
by jukree
ขอบคุณมากครับ หาอยู่เลย
Re: การสุ่มรายชื่อจับรางวัล
Posted: Thu Sep 22, 2016 10:59 am
by menem
ไฟล์นี้ผมเขียนไว้นานแล้ว, ลองดูนะครับว่าใช้วิธีการอะไรบ้าง
แต่โดยคร่าว ๆ คือ การใช้ Rand() เพื่อเรียงลำดับคนที่จะได้รางวัล
ใครอยู่อันดับแรกก็จะได้ไป , และรางวัลจะเรียงแบบ เล็ก ไปหา ใหญ่
Re: การสุ่มรายชื่อจับรางวัล
Posted: Sun Feb 26, 2017 6:40 am
by i5oakza
ซึ้งขอบคุณครับ
Re: การสุ่มรายชื่อจับรางวัล
Posted: Wed Mar 29, 2017 3:04 pm
by swat777
ขอบคุณครับ
Re: การสุ่มรายชื่อจับรางวัล
Posted: Mon Aug 07, 2017 7:51 pm
by note17074
Re: การสุ่มรายชื่อจับรางวัล
Posted: Wed Jan 10, 2018 11:17 am
by siraphob
ขอบคุณมากครับ
Re: การสุ่มรายชื่อจับรางวัล
Posted: Thu Apr 25, 2019 10:20 am
by praerieternal
ขอบคุณนะคะ