Xin trợ giúp về chọn ngẫu nhiên hệ thống trong dãy số

Liên hệ QC

nthxe

Trình còi
Tham gia
14/6/08
Bài viết
259
Được thích
112
Kính chào các bác,

Em có bài toán chọn ngẫu nhiên từ tổng thể muốn nhờ các bác giúp cho công thức xử lý. Dữ liệu em có:

- Cột A: Số thứ tự
- Cột B: Danh sách các mã hàng được sắp xếp lần lượt nhau
- Cột C: Tần xuất xuất hiện của từng mã hàng
- Cột D: Số lượng chọn mẫu từ tổng thể của 1 mã hàng
- Cột E: Bước nhảy. Trong 1 mã hàng, giá trị của bước nhảy là bằng nhau

Yêu cầu:

Trong mỗi mã hàng, chọn ngẫu nhiên một số mã hàng mẫu từ tổng thể mã hàng theo các bước:

- Bước 1: Vị trí đầu tiên của mã hàng được chọn vào mẫu: được xác định bằng giá trị ngẫu nhiên giữa 1 và giá trị của bước nhảy: randbetween(1,giá trị cột E);

- Bước 2: Vị trí của các giá trị chọn mẫu tiếp theo được xác định bằng vị trí của giá trị chọn mẫu đầu tiên + giá trị bước nhảy rồi làm tròn theo hàm round.

- Bước 3:

Tiếp tục chọn vậy cho đến khi đủ số lượng mẫu của từng mã hàng (giá trị ở cột D)

Cảm ơn các bác
 

File đính kèm

  • GPE_31-3.xlsx
    10.9 KB · Đọc: 4
Bạn kiểm tra thử nhé
 

File đính kèm

  • GPE_31-3.xlsb
    20.7 KB · Đọc: 10
vâng bác.
Dữ liệu em làm khá nhiều, em lại ko mang về nhà nên lấy ví dụ thêm 1 nhóm mã hàng với các thông tin như trước.
Các bác xem giúp em ạ
Theo code này thì do số thứ tự của cột A được lấy giá trị tại vị trí khi dữ liệu dòng trên và dòng dưới cột B khác nhau nên chỉ số của biến lớn hơn số dòng khai báo của mảng arr nên lỗi.
 
Lần chỉnh sửa cuối:
Dạ được rồi các bác ạ. do tính không cẩn thận nên file sau em đưa ví dụ sai. Kiểm tra lại số liệu trong file đó thì macro của bác Johnnylinhanh chạy tốt. Mến phục bác về cả nghiệp vụ chứ không chỉ VBA. Sai nghiệp vụ là macro báo lỗi ngay ạ
 
Theo code này thì do số thứ tự của cột A được lấy giá trị tại vị trí khi dữ liệu dòng trên và dòng dưới cột B khác nhau nên chỉ số của biến lớn hơn số dòng khai báo của mảng arr nên lỗi.
Cám ơn bạn đã chỉ nhanh
Như bác Hoàng Tuấn 868 đã chỉ ra thì trường hợp như hình bên dưới bạn muốn kết quả hay thống báo như thế nào?
 

File đính kèm

  • 1648785201923.png
    1648785201923.png
    47.7 KB · Đọc: 8
Lần chỉnh sửa cuối:
vâng bác.
Dữ liệu em làm khá nhiều, em lại ko mang về nhà nên lấy ví dụ thêm 1 nhóm mã hàng với các thông tin như trước.
Các bác xem giúp em ạ
Cách tính của bạn chưa chuẩn, không đáp ứng yêu cầu ngẫu nhiên với khả năng chọn đồng đều của các đơn vị
1/ Hàm RANDBETWEEN của Excel luôn trả về số nguyên, nếu bước nhảy K <2 thì các đơn vị được chọn luôn cố định không thay đổi ngẫu nhiên khi chạy lại code
2/ Cách xác định bước nhảy chưa chuẩn, khả năng phân bố các đơn vị chọn không đều, với ví dụ 10 đơn vị chọn 6, bước nhảy k=10/6 = 1.67 (đã làm tròn), phân 6 nhóm sẽ là
1​
1.67​
1.67​
3.33​
3.33​
5.00​
5.00​
6.67​
6.67​
8.33​
8.33​
10.00​
Rỏ ràng nhóm đầu có khoảng cách là 1.67-1=0.67 các nhóm sau có khoảng cách là 1.67

Cách tính đúng k=(10-1)/6=1.5
TừTới
12.50
2.504.00
4.005.50
5.507.00
7.008.50
8.5010.00
Dữ liệu được sort theo mã và chỉ có số đơn vị được chọn
STTMã hàngSố đơn vị chọn
1010101
6​
1010101
1010101
1010101
1010101
1010101
1010101
1010101
1010101
1010101
1010901
6​
1010901
Chạy code
Mã:
Sub ABC()
  Dim sArr(), Res(), mh$
  Dim sRow&, N&, sl&, i&, j&, fR&, k#, rNum#
 
  With Sheets("Sheet1")
    sArr = .Range("B2:C" & .Range("B999999").End(xlUp).Row + 1).Value
  End With
  sRow = UBound(sArr) - 1
  ReDim Res(1 To sRow, 1 To 1)
  Randomize
  For i = 1 To sRow
    If mh <> sArr(i, 1) Then
      fR = i 'Dòng dau cua ma hang
      mh = sArr(i, 1)
      sl = sArr(i, 2) 'So don vi duoc chon
      N = 1 'So lan xuat hien cua ma hang
    Else
      N = N + 1
    End If
    If mh <> sArr(i + 1, 1) Then
      k = (N - 1) / sl
      rNum = Rnd * k + fR
      For j = 0 To sl - 1
        Res(Round(rNum + k * j, 0), 1) = "Chon"
      Next j
    End If
  Next i
  Sheets("Sheet1").Range("D2").Resize(sRow) = Res
End Sub
 

File đính kèm

  • GPE_31-3_sau.xlsb
    18.9 KB · Đọc: 2
Web KT
Back
Top Bottom