: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 name

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Ponpimon
Member
Member
Posts: 85
Joined: Fri Jan 16, 2015 12:20 am

Random name

#1

Post by Ponpimon »

หนูต้องการrandom ข้อมูลในหน้า ข้อมูล ไปแสดงในหน้า random โดยที่หน้า random มีดรอปดาวน์ให้เลือกด้วยว่าต้องการจะrandom ข้อมูลของอะไร แล้วคลิกปุ่มก็จะโชว์ข้อมูลที่ random ในเซลล์B3
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Random name

#2

Post by snasui »

:D ตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Dim rall As Range, iCount As Integer
With Sheets("ข้อมูล")
    Set rall = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
    iCount = rall.Count
End With
Select Case Sheets("random").Range("a3")
    Case "หัวข้อ1"
        Sheets("random").Range("b3").Value = Application.Index(rall, Int(Rnd * iCount) + 1)
    Case "หัวข้อ2"
        Sheets("random").Range("b3").Value = Application.Index(rall.Offset(0, 1), Int(Rnd * iCount) + 1)
    Case "หัวข้อ3"
        Sheets("random").Range("b3").Value = Application.Index(rall.Offset(0, 2), Int(Rnd * iCount) + 1)
    Case "หัวข้อ4"
        Sheets("random").Range("b3").Value = Application.Index(rall.Offset(0, 3), Int(Rnd * iCount) + 1)
End Select

Ponpimon
Member
Member
Posts: 85
Joined: Fri Jan 16, 2015 12:20 am

Re: Random name

#3

Post by Ponpimon »

อาจารย์คะ มีเงื่อนไขเพิ่มขึ้นมาค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Random name

#4

Post by snasui »

:D ให้เขัยนอธิบายลงมาในฟอรัมและเขียน Code ในแต่ละเงื่อนไขที่ต้องการมาด้วย ติดตรงไหนแล้วค่อยถามกันต่อครับ
Ponpimon
Member
Member
Posts: 85
Joined: Fri Jan 16, 2015 12:20 am

Re: Random name

#5

Post by Ponpimon »

อาจารย์ค่ะ หนูอยากให้ค่าในเซลล์ c และ d สุ่มออกมาพร้อมกันทั้งสองค่า ตอนนี้หนูใส่โค้ดไปแล้ว ค่าออกมาแค่เซลล์ c เซลล์เดียวค่ะ เซลล์ d ไม่แสดงค่ะ
อยากให้ช่อง b เมื่อเลือกกลุ่มเรื่องแล้ว กดสุ่มแล้วทุกช่องสุ่มกรรมการสอบออกมาพร้อมกันเลยค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Random name

#6

Post by snasui »

:D ตามที่อ่านในไฟล์เดิม พบว่ามีการยกเว้นด้วย ไม่ทราบว่ายังมีการยกเว้นหรือไม่ ช่วยอธิบายเพิ่มด้วยครับ
Ponpimon
Member
Member
Posts: 85
Joined: Fri Jan 16, 2015 12:20 am

Re: Random name

#7

Post by Ponpimon »

หนูอยากได้แบบ ถ้ากลุ่มนี้มีอ.ปรึกษา และอ.ปรึกษาร่วมชื่ออะไร ก็จะไม่ให้มีชื่อที่ซ้ำกับอ.ปรึกษา อ.ปรึกษาร่วมมาสุ่ม เงื่อนไขมันเยอะค่ะ หนูเลยคิดไม่ออกค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Random name

#8

Post by snasui »

:D ค่อย ๆ ถามตอบกันไปครับ

ช่วยยกตัวอย่างข้อมูลตามทีอธิบายมาว่าให้สุ่มอย่างไร กรณีใดสุ่มออกมาแล้วใช้ได้ กรณีใดสุ่มออกมาแล้วใช้ไม่ได้ต้องสุ่มใหม่

การเขียน Code ตามลักษณะนี้ต้องพึ่งการ Loop เข้ามาช่วย คือสุ่มแล้วหากผลลัพธ์ที่ได้ไปตรงกับค่าที่ไม่ต้องการก็ให้ทำการสุ่มใหม่จนกว่าจะไม่ตรงกับค่าต้องห้าม
Ponpimon
Member
Member
Posts: 85
Joined: Fri Jan 16, 2015 12:20 am

Re: Random name

#9

Post by Ponpimon »

เช่น ถ้าชื่่อโครงงาน ก ไก่ มีอ.ที่ปรึกษาคือ กานต์ และอ.ที่ปรึกษาร่วมคือ กันต์ เลือกกลุ่มเรื่องเป็น mm เพราะฉะนั้นผลลัพธ์เวลาสุ่ม ก็จะต้องไม่มีกานต์ กับ กันต์แสดงออกมา มันก็จะเหลือแค่ เมย์ คนเดียวค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Random name

#10

Post by snasui »

:D ลองเขียน Code ตามที่อธิบายมา โดยพิจารณาที่ผมโพสต์ไปด้านบนประกอบครับ จะได้ช่วยดูต่อไปจากนั้นครับ
Ponpimon
Member
Member
Posts: 85
Joined: Fri Jan 16, 2015 12:20 am

Re: Random name

#11

Post by Ponpimon »

ตอนนี้หนูทำให้สองช่องสุ่มพร้อมกันได้แล้วค่ะ แต่สองช่องมันยังมีค่าเหมือนกันเป็นบางครั้ง ส่วนอีกเงื่อนไขที่ไม่ให้ซ้ำกับอ.ปรึกษากับอ.ปรึกษาร่วมยังไม่ค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Random name

#12

Post by snasui »

:D ช่วยแสดงคำตอบที่ถูกต้องมาสักสองบรรทัด พร้อมอธิบายมาว่าเหตุใดจึงได้คำตอบนั้น

การสุ่มไม่ให้เหมือนกันต้อง Loop อย่างที่กล่าวไปแล้ว

Code ด้านล่างนี้เป็นเพียงตัวอย่างการ Loop ครับ

Code: Select all

Case "mm"
    Sheets("sheet3").Range("c3").Value = Application.Index(rall, Int(Rnd * iCount) + 1)
    Do While Sheets("Sheet3").Range("d3").Value = Sheets("Sheet3").Range("c3").Value
        Sheets("sheet3").Range("d3").Value = Application.Index(rall, Int(Rnd * iCount) + 1)
    Loop
Ponpimon
Member
Member
Posts: 85
Joined: Fri Jan 16, 2015 12:20 am

Re: Random name

#13

Post by Ponpimon »

อาจารย์ค่ะ ตอนนี้หนูลองนำโค้ดไปใส่ในโปรแกรม ซึ่งโปรแกรมต้องรันข้อมูลประมาณ30กลุ่ม โค้ดเยอะมาก ค่ะ แล้วมันไม่รันด้วยค่ะ แต่ว่าในโปรแกรมตัวอย่างที่ลองทำมันรันค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Random name

#14

Post by snasui »

:D Code ที่ว่าเยอะลองนับดูว่ากี่บรรทัดครับ
Ponpimon
Member
Member
Posts: 85
Joined: Fri Jan 16, 2015 12:20 am

Re: Random name

#15

Post by Ponpimon »

ประมาณ70บรรทัดจะรันข้อมูลได้1 กลุ่มค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Random name

#16

Post by snasui »

:D จำนวนบรรทัดรวม 30 กลุ่ม ก็ยังไม่เกินข้อจำกัดของ Excel กรณี Code มากเกินไป Excel จะฟ้องให้เห็นว่า Code ยาวเกินไปครับ

ลองกดแป้น F8 เพื่อ Run ทีละ Step ดูว่าติดขัดตรงไหนครับ
Ponpimon
Member
Member
Posts: 85
Joined: Fri Jan 16, 2015 12:20 am

Re: Random name

#17

Post by Ponpimon »

อาจารย์ค่ะ ตอนนี้หนูให้อาจารย์ของหนูช่วยเขียนโค๊ดมาแล้วค่ะ แต่ว่าพอหนูเปลี่ยนข้อมูลในช่องชื่อโครงงาน เป็นกลุ่มอื่น ความเป็นจริงในช่องสุ่มจะต้องสุ่มกรรมการตามกลุ่มเรื่อง แล้วจะต้องไม่เลือกอาจารย์ที่ปรึกษากับอาจารย์ที่ปรึกษาร่วมมาสุ่มด้วย แต่มันยังเอาอาจารย์ที่ปรึกษากับที่ปรึกษาร่วมมาสุ่มค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Random name

#18

Post by snasui »

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

การสุ่มไม่ให้เหมือนกันต้อง Loop อย่างที่กล่าวไปแล้ว
ที่ผมตอบไปหลังจากคำถามนั้นเป็นการตอบอย่างกว้าง ๆ เพื่อนำไปประยุกต์ใช้เท่านั้น
Ponpimon
Member
Member
Posts: 85
Joined: Fri Jan 16, 2015 12:20 am

Re: Random name

#19

Post by Ponpimon »

เช่น ถ้าชื่่อโครงงาน ก ไก่ มีอ.ที่ปรึกษาคือ กานต์ และอ.ที่ปรึกษาร่วมคือ กันต์ ถ้าหนูเลือกกลุ่มเรื่องเป็น mm เพราะฉะนั้นผลลัพธ์เวลาสุ่ม ก็จะต้องไม่มีกานต์ กับ กันต์
ผลที่แสดงออกมา มันก็จะเหลือแค่ เมย์ คนเดียวค่ะ

สิ่งที่หนูต้องการเป็นแบบนี้ค่ะ อันนี้หนูยกตัวอย่างของกลุ่มแรกค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Random name

#20

Post by snasui »

:D ตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Sub test()
    Dim prjs As Range, prj As Range, pjl As Integer
    Dim pa As Range, paCheck As Range, pck As Range
    Dim cmAll As Range, cm As Range, cmr As Range, c As Range
    Dim grpAll As Range, gSl() As Variant, gc As Integer
    Dim gt As Range, g As Range, iCount As Integer, i As Integer
    Dim ig As Integer, t As String, x As String
    With Sheets("Sheet2")
        Set pa = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
        Set grpAll = .Range("f1", .Range("f1").End(xlToRight))
    End With
    With Sheets("Sheet3")
        Set paCheck = .Range("a3", .Range("a" & .Rows.Count).End(xlUp))
    End With
    For Each pck In paCheck
        pjl = Application.Match(pck, pa, 0)
        Set cmAll = pa.Offset(pjl - 1, 1).Resize(1, 2)
        gc = Application.Match(pck.Offset(0, 1), grpAll, 0)
        Set gt = Range(grpAll.Offset(1, gc - 1), grpAll.Offset(1, gc - 1) _
            .End(xlDown)).Resize(, 1)
        iCount = 0
        For Each g In gt
            If Application.CountIf(cmAll, g) = 0 Then
                ReDim Preserve gSl(iCount)
                gSl(iCount) = g
                iCount = iCount + 1
            End If
        Next g
        Set cmr = pck.Offset(0, 2).Resize(1, 2)
        t = ""
        i = 0
        For Each c In cmr
            Do While i <= 1
                x = gSl(Int(Rnd * (UBound(gSl) + 1)))
                If InStr(t, x) = 0 Then
                    t = t & x
                    c.Offset(0, i) = x
                    i = i + 1
                End If
            Loop
        Next c
    Next pck
End Sub
Post Reply