Hỏi về hàm lấy danh sách ngẫu nhiên có điều kiện. (2 người xem)

  • Thread starter Thread starter TjnNuv
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

TjnNuv

Thành viên mới
Tham gia
11/4/14
Bài viết
9
Được thích
0
Nhờ anh chị em code về hàm lấy danh sách ngẫu nhiên có điều kiện.

Ace giúp mình file chọn danh sách ngẫu nhiên này với. Mình đã làm được chọn danh sách không trùng nhau theo STT như file đính kèm. Tuy nhiên giờ mình muốn chọn danh sách ngẫu nhiên nhưng danh sách hộ này phải có ở trong danh sách tất cả các thôn. Như là danh sách hộ được chọn ngẫu nhiên phải có đủ danh sách ở tất cả các Thôn vậy. Giống với bài toán mà chia học sinh thi học kỳ với điều kiện là trong 1 phòng thi có học sinh của tất cả các lớp. Mình nghĩ mãi mà không ra cách làm nên mang lên đây nhờ a e giúp.
 

File đính kèm

Lần chỉnh sửa cuối:
Ace giúp mình file chọn danh sách ngẫu nhiên này với. Mình đã làm được chọn danh sách không trùng nhau theo STT như file đính kèm. Tuy nhiên giờ mình muốn chọn danh sách ngẫu nhiên nhưng danh sách hộ này phải có ở trong danh sách tất cả các thôn. Như là danh sách hộ được chọn ngẫu nhiên phải có đủ danh sách ở tất cả các Thôn vậy. Giống với bài toán mà chia học sinh thi học kỳ với điều kiện là trong 1 phòng thi có học sinh của tất cả các lớp. Mình nghĩ mãi mà không ra cách làm nên mang lên đây nhờ a e giúp.

Bạn đang dùng không đúng tác dụng của hàm UniqueRandomNum nên mới vậy.

Bạn thử file này xem đã đúng kết quả cần chưa nhé.
 

File đính kèm

Mỗi thôn chọn lấy 1 người bất kỳ đây, xin mời!

-\\/. -\\/. -\\/. @$@!^% @$@!^% -\\/. -\\/. -\\/.
 

File đính kèm

Cám ơn hai bạn nhé. Nhưng không hiểu mình làm sai ở đâu T_T
 
Xin biếu bạn hàm mảng người dùng; Tác dụng là lập danh sách duy nhất từ các thôn & mỗi thôn lại lấy 1 người bất kỳ trong nớ!
 

File đính kèm

Cám ơn bạn. Mình đã thử dùng tương tự như của bạn nhưng nó random không ra tất cả danh sách các thôn như file mẫu của bạn :-s
Hix
 
Mình xin giải thích thêm về 2 hàm tự tạo này:

Hàm thứ nhất cần cung cấp chỉ 1 tham biến vùng; Tuy nhiên vùng này chí ít 2 cột; 1 cột là họ & tên của 1 danh sách (DS) & cột tiếp sau là cột chứa 'thôn' (có thể là lớp hay tổ/bộ fận của cơ quan)
Chủ iếu hàm thứ nhất này là lập DS duy nhất của 'thôn'
Đồng thời trong quá trình lập DS, nó triệu gọi hàm thứ 2; Cung cấp 2 tham biến. Tham biến thứ nhất là 'thôn' trong DS duy nhất & tham biến nữa là vùng mà hàm 'Cha' vừa nhận được bởi chúng ta cung cấp (Thực tế ta chỉ cần cung cấp cột dữ liệu thứ 2 của vùng này mà thôi)

PHP:
Option Explicit
Function DS1DN2NgauNhien(Rng As Range)
 Dim J As Long, W As Long
 Dim Arr(), Dict As Object, dArr(), Tmp As String
 
 Set Dict = CreateObject("Scripting.Dictionary")
 Arr() = Rng.Value
 ReDim dArr(1 To UBound(Arr()), 1 To 2)
 For J = 1 To UBound(Arr())
    If Not Dict.exists(Arr(J, 2)) Then
        W = W + 1
        Dict.Add Arr(J, 2), W
        dArr(W, 1) = Arr(J, 2)
        Tmp = Arr(J, 2)
        dArr(W, 2) = RadomUniqueString(Tmp, Rng(2).Resize(Rng.Rows.Count))
    End If
 Next J
 DS1DN2NgauNhien = dArr()
End Function


Mã:
[B][COLOR=#0000cd]Function RadomUniqueString(DC As String, Rng As Range[/COLOR])
[/B] Dim sRng As Range
 Dim Num As Byte, J As Byte
 
 Application.Volatile '<--- Neu muon gia tri thay doi khi bam F9'
 Set sRng = Rng.Find(DC, , xlFormulas, xlWhole)
 Randomize
 Num = Application.CountIf(Rng, DC) * Rnd() \ 1
 If Num = 0 Then Num = 1
 If Not sRng Is Nothing Then
    Set Rng = sRng.Resize(Rng.Rows.Count)
    For Each sRng In Rng
        If sRng.Value = DC Then J = J + 1
        If J = Num Then
            RadomUniqueString = sRng.Offset(, -1).Value
            Exit For
        End If
    Next sRng
 End If
[COLOR=#0000cd][B]End Function
[/B][/COLOR]

Nhưng đây là hàm mảng, ta sẽ không thể tùy tiện thay đổi chỉ 1 hay vài thành fần của mảng.
 
Cám ơn bạn. Nhờ bạn giải thích mà mình đã có thể tùy biến code của mình rồi. Thanks nhé
 
Web KT

Bài viết mới nhất

Back
Top Bottom