:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

สอบถามการ random โดย VBA

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Thaipichit Pomwong
Member
Member
Posts: 9
Joined: Thu Sep 08, 2016 1:52 pm

สอบถามการ random โดย VBA

#1

Post by Thaipichit Pomwong »

ถึงอาจารย์และเพื่อนๆทุกคนครับ

ผมไม่เข้าใจว่าทำไม เมื่อทำการ random แล้วถึงเหลือค่าตัวเลขติดอยู่ 1 ค่าที่ไม่ถูก random ครับ
จะต้องแก้ไขหรือปรับเปลี่ยนตรงไหนอย่างไร รบกวนช่วยดูและแนะนำให้หน่อยนะครับ
การสุ่มตัวเลขBinGO.xlsm
(228.35 KiB) Downloaded 7 times
ตัวอย่าง VBA
Dim r As Range
Sub RandomName()
Dim i As Integer
Dim j As Integer
'Application.OnTime Now() + TimeValue("00:00:1"), "RandomName"
On Error Resume Next
With Worksheets("ÃËÑʵÑÇàÅ¢")
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("D3").PasteSpecial xlPasteValues
.Shapes("Button 12").Visible = True
End With
Application.CutCopyMode = False
End Sub

Sub KeepVal()
Dim rs As Range
Dim rt As Range
On Error Resume Next
With Worksheets("áÊ´§¼Å")
Set rs = .Range("D3")
If .Range("Q7") = "" Then
Set rt = .Range("Q7")
Else
Set rt = .Range("Q65536").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
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการ random โดย VBA

#2

Post by snasui »

:D ช่วยโพสต์ Code ให้แสดงเป็น Code ตามกฎการใช้บอร์ดข้อ 5 ด้านบนด้วยครับ :roll:
Thaipichit Pomwong
Member
Member
Posts: 9
Joined: Thu Sep 08, 2016 1:52 pm

Re: สอบถามการ random โดย VBA

#3

Post by Thaipichit Pomwong »

Thaipichit Pomwong wrote: Fri Dec 21, 2018 5:56 pm ถึงอาจารย์และเพื่อนๆทุกคนครับ

ผมไม่เข้าใจว่าทำไม เมื่อทำการ random แล้วถึงเหลือค่าตัวเลขติดอยู่ 1 ค่าที่ไม่ถูก random ครับ
จะต้องแก้ไขหรือปรับเปลี่ยนตรงไหนอย่างไร รบกวนช่วยดูและแนะนำให้หน่อยนะครับ
การสุ่มตัวเลขBinGO.xlsm
ตัวอย่าง VBA

Code: Select all

Dim r As Range
Sub RandomName()
Dim i As Integer
Dim j As Integer
'Application.OnTime Now() + TimeValue("00:00:1"), "RandomName"
On Error Resume Next
With Worksheets("ÃËÑʵÑÇàÅ¢")
    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("D3").PasteSpecial xlPasteValues
    .Shapes("Button 12").Visible = True
End With
     Application.CutCopyMode = False
End Sub

Sub KeepVal()
Dim rs As Range
Dim rt As Range
On Error Resume Next
With Worksheets("áÊ´§¼Å")
    Set rs = .Range("D3")
    If .Range("Q7") = "" Then
        Set rt = .Range("Q7")
    Else
        Set rt = .Range("Q65536").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
Thaipichit Pomwong
Member
Member
Posts: 9
Joined: Thu Sep 08, 2016 1:52 pm

Re: สอบถามการ random โดย VBA

#4

Post by Thaipichit Pomwong »

snasui wrote: Fri Dec 21, 2018 7:12 pm :D ช่วยโพสต์ Code ให้แสดงเป็น Code ตามกฎการใช้บอร์ดข้อ 5 ด้านบนด้วยครับ :roll:
ขอโทษครับ อาจารย์
ผมโพสต์ใหม่แล้วครับผม

ตอนนี้ผมแก้ไข โดยใช้วิธีเพิ่มตัวเลข 100 ใส่เข้าไปอีก 1 แทนครับ
Attachments
IndexRandom.jpg
IndexRandom.jpg (65.08 KiB) Viewed 138 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการ random โดย VBA

#5

Post by snasui »

:D ช่วงเซลล์ในสูตรในชีต IndexRandom ตรงคอลัมน์ E ไม่ครอบคลุมข้อมูลที่ใช้

ที่เซลล์ E2 ควรปรับเป็นด้านล่างครับ

=INDEX($A$2:$A$101,MATCH(ROWS($E$2:E2),$C$2:$C$101,0))
Thaipichit Pomwong
Member
Member
Posts: 9
Joined: Thu Sep 08, 2016 1:52 pm

Re: สอบถามการ random โดย VBA

#6

Post by Thaipichit Pomwong »

snasui wrote: Mon Dec 24, 2018 1:43 pm :D ช่วงเซลล์ในสูตรในชีต IndexRandom ตรงคอลัมน์ E ไม่ครอบคลุมข้อมูลที่ใช้

ที่เซลล์ E2 ควรปรับเป็นด้านล่างครับ

=INDEX($A$2:$A$101,MATCH(ROWS($E$2:E2),$C$2:$C$101,0))
ขอบคุณมากครับอาจารย์
ผมลองทดสอบดูแล้ว สามารถสุ่มตัวเลขได้ครบทั้งหมด 100 ตัวเลขครับ
แต่มีข้อสงสัยอย่างหนึ่ง คือไม่ว่าจะทดสอบกี่ครั้ง หมายเลข 100 จะถูกสุ่มเป็นลำดับสุดท้ายในทุกครั้งครับผม
ทำไมถึงเป็นเช่นนั้น ครับ?
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการ random โดย VBA

#7

Post by snasui »

:D ผมกดแป้น F9 แล้วเห็นว่ามีการสุ่มสลับกันตามปกติครับ

หรือจะต้องทดสอบอย่างไร สังเกตตำแหน่งไหน ช่วยให้รายละเอียดเพิ่มเติมมาด้วยครับ
Thaipichit Pomwong
Member
Member
Posts: 9
Joined: Thu Sep 08, 2016 1:52 pm

Re: สอบถามการ random โดย VBA

#8

Post by Thaipichit Pomwong »

snasui wrote: Mon Dec 24, 2018 2:48 pm :D ผมกดแป้น F9 แล้วเห็นว่ามีการสุ่มสลับกันตามปกติครับ

หรือจะต้องทดสอบอย่างไร สังเกตตำแหน่งไหน ช่วยให้รายละเอียดเพิ่มเติมมาด้วยครับ
เป็นแบบในภาพครับ อาจารย์
ไม่ว่าจะเริ่มการสุ่มใหม่กี่ครั้ง ลำดับสุดท้ายที่สุ่มจะเป็นหมายเลข 100 ตลอดครับผม
ซึ่งผมว่ามันไม่ถูกต้องตามหลักการสุ่ม ครับ
แต่ผมไม่ทราบว่าจะต้องแก้ไขตรงไหน อย่างไรครับ
Attachments
สุ่มตัวเลข.jpg
สุ่มตัวเลข.jpg (116.56 KiB) Viewed 119 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการ random โดย VBA

#9

Post by snasui »

:D เนื่องจากการสุ่มเป็นการสุ่มโดยการ Fixed ตำแหน่งเอาไว้แล้วว่าจะเอาค่าใดมาแสดง

ในพื้นที่ E4:N13 เป็นการนำค่าใน Q7:Q200 มาแสดง และจะแสดงในรูปแบบเดิมเสมอ ช่องที่ 1 แสดงเลข 1 ช่องที่ 2 แสดงเลข 2...จนถึงช่องที่ 100 แสดงเลข 100

ผมไม่เคยศึกษาวิธีการเล่น Bingo ช่วยเล่าว่าต้องการจะให้แสดงผลเช่นไรมาด้วยครับ
Thaipichit Pomwong
Member
Member
Posts: 9
Joined: Thu Sep 08, 2016 1:52 pm

Re: สอบถามการ random โดย VBA

#10

Post by Thaipichit Pomwong »

snasui wrote: Mon Dec 24, 2018 6:16 pm :D เนื่องจากการสุ่มเป็นการสุ่มโดยการ Fixed ตำแหน่งเอาไว้แล้วว่าจะเอาค่าใดมาแสดง

ในพื้นที่ E4:N13 เป็นการนำค่าใน Q7:Q200 มาแสดง และจะแสดงในรูปแบบเดิมเสมอ ช่องที่ 1 แสดงเลข 1 ช่องที่ 2 แสดงเลข 2...จนถึงช่องที่ 100 แสดงเลข 100

ผมไม่เคยศึกษาวิธีการเล่น Bingo ช่วยเล่าว่าต้องการจะให้แสดงผลเช่นไรมาด้วยครับ
ครับอาจารย์

แต่โดยหลักการสุ่มแล้ว ไม่ควรเป็นการกำหนดแบบ fix ในทุกครั้งที่เริ่มกดปุ่ม Random
ซึ่งดูจากโค้ด VBA ที่เขียนไว้ ตามข้างล่างนี้ครับ (ที่ผมไม่เข้าใจ ว่าทำไมถึงเป็นหมายเลข 100 ที่เป็นลำดับสุดท้ายเสมอ จากการสุ่มในแต่ละรอบ)

Code: Select all

Sub RandomName()
Dim i As Integer
Dim j As Integer
'Application.OnTime Now() + TimeValue("00:00:05"), "RandomName"
On Error Resume Next
With Worksheets("รหัสตัวเลข")
    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("D3").PasteSpecial xlPasteValues
    .Shapes("Button 12").Visible = True
End With
     Application.CutCopyMode = False
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการ random โดย VBA

#11

Post by snasui »

:D ลองปรับ Code เป็นด้านล่างแล้วลองสุ่มดูใหม่ หากยังเป็นปัญหาให้แนบไฟล์ที่ปรับเป็น Code ล่าสุดมาแล้วด้วยจะได้ตอบต่อไปจากนั้น หากผมไม่เข้าใจว่าต้องการจะทำอะไรผมจะตอบเพื่อแก้ปัญหาเฉพาะหน้าไปเรื่อย ๆ ต้องทำใจว่าอาจจะถามตอบกันหลายโพสต์ครับ :mrgreen:

Code: Select all

Sub RandomName()
    Dim i As Integer
    Dim j As Integer
    With Worksheets("รหัสตัวเลข")
        j = .Range("A65536").End(xlUp).Value
        i = Int(Rnd * j + 1)
    End With
    
    With Worksheets("แสดงผล")
        .Range("D3").Value = i
        .Shapes("Button 12").Visible = True
    End With
End Sub
Post Reply