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
:D ส่งไฟล์ตัวอย่างมาด้วยครับ การทำเช่นนั้นคิดว่าต้องใช้ 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
:D สามารถสอบถามที่หมวด 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
:D ดูการกำหนดค่า 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
:D มีวิธีแก้แบบง่าย ๆ โดยการแทรก 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
:thup: :thup: :thup: :thup: :thup: :thup: :thup: :thup:

Re: การสุ่มรายชื่อจับรางวัล

Posted: Wed Jan 10, 2018 11:17 am
by siraphob
ขอบคุณมากครับ

Re: การสุ่มรายชื่อจับรางวัล

Posted: Thu Apr 25, 2019 10:20 am
by praerieternal
ขอบคุณนะคะ