TẠO FILE VÒNG QUAY NHÂN SỰ

Liên hệ QC

Nông tiệp

Thành viên mới
Tham gia
25/2/20
Bài viết
37
Được thích
0
Em chào Anh chị trong GPE.
Em có một vẫn đề cần Anh chị giúp ạ
Em muốn tạo một file sử dụng VBA giống như quay sổ số để chọn ngẫu nhiêu tên một bạn trong file
mong Anh chị trong GPE giúp em với ạ
 

File đính kèm

  • VONG QUAY.xlsx
    10.6 KB · Đọc: 15
chọn chỉ một thì cần gì phải vê bê a
=index($B$2:$B$21, randbetween(1, 20))
mỗi lần muốn đổi người chọn thì vào công thức rồi gõ enter (không sửa gì cả).
 
Lần chỉnh sửa cuối:
Upvote 0
Phải VBA chứ bác: Ngày thứ N<=20 phải chọn những người chưa được chọn trước đó mà.
Thuật giải có thể phải xài thêm cột 'C' để ghi nhận những người đã chọn (hay chưa được chọn) trong tua (chu kì)
 
Upvote 0
Nếu cẩn phải chọn nhiều lần thì cách giản dị nhất là cứ tạo thêm 1 cột random rồi sort.

Cách hơi phức tạp hơn một chút (nhưng vẫn còn giản dị hơn code VBA):
- tạo cột phụ
- hàm random.
- copy + paste values
- Hàm Rank (khả năng trùng rank rất thấp. Nhưng nếu bị trùng cũng có cách micro-rank)

VBA nghe xịn nhưng chỉ là cách chữa cháy.
Làm việc với "ngẫu nhiên" là phải biết cách nắm vững luật ngẫu nhiên.
 
Upvote 0
em cảm ơn Anh chị đã quan tâm đến bài của em. cũng như đã tạo giúp em file này ạ
Bài đã được tự động gộp:

chọn chỉ một thì cần gì phải vê bê a
=index($B$2:$B$21, randbetween(1, 20))
mỗi lần muốn đổi người chọn thì vào công thức rồi gõ enter (không sửa gì cả).
em cảm ơn Anh chị đã góp ý... em muốn sử dụng VBA để chọn và coi như là chơi vận may như XSMB vậy
 
Upvote 0
cho em hỏi thêm là em muốn nối thêm đoạn sub cuối này vào đoạn sub của anh đã viết thì ta làm thế nào ạ. em muốn nó nhấp nháy cho file thêm sinh động ạ. mong Anh chỉ giúp
ReDim ArrDest(1 To UBound(ArrData, 1), 1 To 1)
If lastRow = lastrow2 Then
Range("C2:C" & lastRow).ClearContents
ArrDest = ArrData
k = UBound(ArrDest, 1)
lastrow2 = 1
Else
For i = 1 To UBound(ArrDest, 1)
If Application.CountIf(Range("C1:C" & lastrow2), ArrData(i, 1)) = 0 Then
k = k + 1
ArrDest(k, 1) = ArrData(i, 1)
End If
Next
End If
Randomize
rd = Int(Rnd() * k) + 1
Range("E4") = ArrDest(rd, 1)
Range("C" & lastrow2 + 1) = ArrDest(rd, 1)

End Sub
Sub Gaconet()
Dim xCell As Range
Dim xTime As Variant
Set xCell = Range("E4")
With ThisWorkbook.Worksheets("Sheet1").Range("E4").Font
If xCell.Font.Color = vbRed Then
xCell.Font.Color = vbWhite
Else
xCell.Font.Color = vbRed
End If
End With
xTime = Now + TimeSerial(0, 0, 1)
Application.OnTime xTime, "'" & ThisWorkbook.Name & "'!Gaconet", , True
End Sub

1594047505558.png
 
Upvote 0
Web KT
Back
Top Bottom