Nhờ anh HieuCD và các anh em diễn đàn code giúp em!

Liên hệ QC

phamxuanyen

Thành viên mới
Tham gia
1/9/08
Bài viết
42
Được thích
7
em có danh sách khoang 500 người nhờ các anh em diễn đàn dùng code chia thành các nhóm do mình định; mỗi nhóm với số lượng do mình định.
ví dụ: nhóm 1 có 20 người ở các đơn vị khác nhau; nhóm 2 có 30 người ......................
 

File đính kèm

  • Danh sach.xls
    38.5 KB · Đọc: 21
em có danh sách khoang 500 người nhờ các anh em diễn đàn dùng code chia thành các nhóm do mình định; mỗi nhóm với số lượng do mình định.
ví dụ: nhóm 1 có 20 người ở các đơn vị khác nhau; nhóm 2 có 30 người ......................
Đã code xong. CHờ mọi người không ai trả lời thì tôi sẽ post sau
Nhá hàng tí
1605168487507.png
 
Tạm file này trong khi chờ đợi file khác xịn hơn

Danh sách nhân sự7
10​
TTMã NSHỌ VÀ TÊNĐƠN VỊ
9​
24
BMT00​
Bùi Giảng Minh Trí​
Trường Đại học Y Dược Cần ThơNhóm 1Nhóm 2Nhóm 3Nhóm 4Nhóm 5Nhóm 6Nhóm 7Sỉ số
8​
48
BQT00​
Bùi Quang TrungTrường THPT Sông Đốc16
15​
16​
15​
16​
15​
16​
109
7​
7
BVH00​
Bùi Văn HiếuTrường THPT Phan Ngọc Hiển
BMT00​
HCT00​
LMT00​
NLQ00​
NTL00​
PXY00​
TNY00​
6​
40
BVK00​
Bùi Văn KhuyếnTrường THPT Tắc Vân
BQT00​
HNP00​
LQT00​
NLR00​
NTL13​
TBH00​
TPD00​
5​
2
CMK00​
Châu Minh KhoaTrường Đại học Y Dược Cần Thơ
BVH00​
HNT00​
LTT00​
NMT00​
NTL06​
TBT00​
TTH00​
4​
57
CMT00​
Cao Minh Thương​
Trường THPT Phú Tân
BVK00​
HTH00​
LVQ00​
NMT02​
NTQ00​
TCT00​
TTH00​
3​
34
CVN00​
Châu Vĩnh Nghiêm​
Trường THPT Cà Mau
CMK00​
HTN00​
MKT00​
NMT03​
NTS00​
TDL00​
TTH10​
2​
70
DKD00​
Diệp Kiều DiễmTrường Đại học Y Dược Cần Thơ
CMT00​
HVN00​
NAN00​
NNF00​
NVB00​
TFL00​
TTN00​
1​
5
DQQ00​
Dương Quốc QuangTrường THPT Quách Văn Phẩm
CVN00​
HVS00​
NDT00​
NNN00​
NVH00​
THB00​
TTS00​
0​
85
DTT00​
Dương Thanh ThuậnTrường THCS&THPT Lý Văn Lâm
DKD00​
HVT00​
NHA00​
NPA00​
NVH08​
THD00​
TTV00​
0​
45
DVK00​
Dương Văn Kha​
Trường THPT Trần Văn Thời
DQQ00​
LCD00​
NHN00​
NQV00​
NVH09​
THL00​
TVC00​
0​
109
FAT00​
Đoàn Anh TuấnTrung tâm Y tế Phú Tân
DTT00​
LHK00​
NHP00​
NTD00​
NXM00​
THP00​
TVF00​
78
FCL00​
Đỗ Chúc LinhTrường THPT chuyên Phan Ngọc Hiển
DVK00​
LHT00​
NHT00​
NTD12​
PCC00​
THS00​
TVG00​
18
FHN00​
Đoàn Hữu Nhân​
Trường Đại học Y Dược Cần Thơ
FAT00​
LHT01​
NHT00​
NTD05​
PDL00​
TLA00​
TVL00​
89
FMV00​
Đặng Minh VươngTrường THPT Phú Hưng
FCL00​
LHV00​
NHT01​
NTG00​
PMH00​
TMT00​
TVU00​
97
HBL00​
Huỳnh Thị Bé LànhTrường THPT Cà Mau
FHN00​
LMA00​
NKP00​
NTK00​
PTT00​
TNQ00​
TVV00​
103
HCT00​
Hồ Chí TâmTrung tâm Y tế Phú Tân
FMV00​
LMH00​
NLC00​
NTK07​
PTV00​
TNT00​
VBY00​
26
HNP00​
Hà Nhật Phương​
Trường Đại học Y Dược Cần Thơ
HBL00​
NLH00​
PVT00​
VTH00​
27
HNT00​
Huỳnh Thị Ngọc Thanh​
Trường Đại học Y Dược Cần Thơ
 

File đính kèm

  • Ngẫu.rar
    20.8 KB · Đọc: 17
Lần chỉnh sửa cuối:
em có danh sách khoang 500 người nhờ các anh em diễn đàn dùng code chia thành các nhóm do mình định; mỗi nhóm với số lượng do mình định.
ví dụ: nhóm 1 có 20 người ở các đơn vị khác nhau; nhóm 2 có 30 người ......................
Chưa rỏ bạn muốn chia như thế nào, những dạng nầy nên đưa dữ liệu khá đầy đủ với số lượng thật và kết quả nhập tay mới có thể viết code chuẩn được
Bài đã được tự động gộp:

Bộ hỏng thấy người quen hả. Coi chừng bị chửi nhe.
Bạn nầy ở vùng sông nước cực nam đất Việt
 
Chưa rỏ bạn muốn chia như thế nào, những dạng nầy nên đưa dữ liệu khá đầy đủ với số lượng thật và kết quả nhập tay mới có thể viết code chuẩn được
Bài đã được tự động gộp:


Bạn nầy ở vùng sông nước cực nam đất Việt
em có danh sách 851 các anh giúp em chia thành các nhóm do mình định; mỗi nhóm với số lượng do mình định.
ví dụ: chia thành 17 hay 16 nhóm moi nhóm có số lượng người do mình định như: nhóm 1 có 20 người ở các đơn vị khác nhau; nhóm 2 có 30 người, nhóm 3 có 14 người, nhóm 5 có 50 người, nhóm 6 có 100 người, nhóm 7 có 200 người, nhóm 8 có 78 người, nhóm 9 có 98 người ............................. (số lượng người cho từng nhóm do mình tự định được không anh)
 

File đính kèm

  • Danh sach coi thi.xlsx
    40 KB · Đọc: 13
Chữ ký quảng cáo quép sai có phạm luật diễn đàn không nhỉ?
 
em có danh sách 851 các anh giúp em chia thành các nhóm do mình định; mỗi nhóm với số lượng do mình định.
ví dụ: chia thành 17 hay 16 nhóm moi nhóm có số lượng người do mình định như: nhóm 1 có 20 người ở các đơn vị khác nhau; nhóm 2 có 30 người, nhóm 3 có 14 người, nhóm 5 có 50 người, nhóm 6 có 100 người, nhóm 7 có 200 người, nhóm 8 có 78 người, nhóm 9 có 98 người ............................. (số lượng người cho từng nhóm do mình tự định được không anh)
Mục đích chia nhóm là gì? Nếu cần thiết mình sẽ viết code
 
Mục đích chia nhóm là gì? Nếu cần thiết mình sẽ viết code
Mục đích chia nhóm là gì? Nếu cần thiết mình sẽ viết code
Mục đích của em để khi phân công các giám thị của từng trường về các điểm thi không bị trùng nhau đó anh. Ví dụ: Có 851 người chia không đều cho 17 điểm thi. Có điểm thi thì 50, có điểm thi thì 80, có điểm 100 .... nó tuỳ thuộc số phòng thi tại điểm thi đó) cảm ơn anh trước nha
 
Mục đích của em để khi phân công các giám thị của từng trường về các điểm thi không bị trùng nhau đó anh. Ví dụ: Có 851 người chia không đều cho 17 điểm thi. Có điểm thi thì 50, có điểm thi thì 80, có điểm 100 .... nó tuỳ thuộc số phòng thi tại điểm thi đó) cảm ơn anh trước nha
khi nào các anh có thời gian rảnh giúp em nha!
 
Mục đích của em để khi phân công các giám thị của từng trường về các điểm thi không bị trùng nhau đó anh. Ví dụ: Có 851 người chia không đều cho 17 điểm thi. Có điểm thi thì 50, có điểm thi thì 80, có điểm 100 .... nó tuỳ thuộc số phòng thi tại điểm thi đó) cảm ơn anh trước nha
Vậy là số diểm trường đã biết & số HS ở mỗi điểm trường cũng đã biết.

Lên danh sách đầy đủ & gạt ngang theo thứ tự cũng OK mà!
 
Mục đích của em để khi phân công các giám thị của từng trường về các điểm thi không bị trùng nhau đó anh. Ví dụ: Có 851 người chia không đều cho 17 điểm thi. Có điểm thi thì 50, có điểm thi thì 80, có điểm 100 .... nó tuỳ thuộc số phòng thi tại điểm thi đó) cảm ơn anh trước nha
Nhập dữ liệu vào Sheet1 và Sheet2
Code phân công theo tỷ lệ số Giám thị của từng đơn vị và chọn Giám thị ngẫu nhiên, mỗi lần chạy Sub Main sẽ có kết quả khác nhau
Mã:
  Dim eRow&, sRow&, i&, iR&, j&, jC&
  Dim soGV&, soNhom&, soDV&, DV$, tmp
 
Sub Main()
  Dim aNhom(), aGV(), aPhanBo(), Res()
 
  Sheets("KetQua").UsedRange.Offset(3).ClearContents
  With Sheets("Sheet2")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow < 5 Then MsgBox ("Khong chia nhom"): Exit Sub
    aNhom = .Range("B5:C" & eRow).Value 'Mang Nhom
    soGV = .Range("C4").Value 'So Giao Vien
    soNhom = UBound(aNhom) 'So Nhom
  End With
  With Sheets("Sheet1")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow < 4 Then MsgBox ("Khong co Giao Vien"): Exit Sub
    .Range("A4:E4").Resize(soGV).Copy Sheets("KetQua").Range("A4")
  End With
  With Sheets("KetQua")
    .Range("A3:F" & eRow).Sort .Range("E3"), 1, Header:=xlYes
    aGV = .Range("E4:E" & eRow).Value 'Mang Giao Vien
    If UBound(aGV) <> soGV Then MsgBox ("So Luong GV Chia Nhom Khong Dung"): Exit Sub
    
    Call TaoMang_aPhanBo(aNhom, aGV, aPhanBo) 'Tao Bang Phan Bo Giao Vien theo ty le
    ReDim Res(1 To soGV, 1 To 1)
    Call PhanBoGiaoVien(aNhom, aPhanBo, Res) 'Phan bo Giao Vien
    .Range("F4").Resize(soGV) = Res 'Xep thu tu theo Don Vi
    
    .Range("B4:F4").Resize(soGV).Copy .Range("I4") 'Xep thu tu theo Nhom
    .Range("H3:M" & eRow).Sort .Range("M3"), 1, Header:=xlYes
    .Range("A4").Resize(soGV).Copy .Range("H4")
  End With
End Sub

Private Sub PhanBoGiaoVien(aNhom, aPhanBo, Res)
  Dim Arr() As Long, k As Long
  For j = 1 To soDV 'Phan bo Giao Vien tung Don Vi
    ReDim Arr(1 To aPhanBo(0, j))
    Call TaoMangNgauNhien(Arr, aPhanBo(0, j))
    jC = 0
    For i = 1 To soNhom
      For iR = 1 To aPhanBo(i, j)
        jC = jC + 1
        Res(k + Arr(jC), 1) = aNhom(i, 1)
      Next iR
    Next i
    k = k + jC
  Next j
End Sub

Private Sub TaoMangNgauNhien(Arr, ByVal N&)
  Randomize
  For i = 1 To N
    iR = Int(N * Rnd() + 1)
    If Arr(iR) = 0 Then tmp = iR Else tmp = Arr(iR)
    If Arr(N) = 0 Then Arr(iR) = N Else Arr(iR) = Arr(N)
    Arr(N) = tmp
    N = N - 1
  Next i
End Sub

Private Sub TaoMang_aPhanBo(aNhom, aGV, aPhanBo)
  soDV = 0
  For i = 1 To soGV 'Tao Mang Phan Bo
    If DV <> aGV(i, 1) Then
      DV = aGV(i, 1)
      soDV = soDV + 1 'So Don vi
      ReDim Preserve aPhanBo(-2 To soNhom, 0 To soDV)
      aPhanBo(-2, soDV) = DV: aPhanBo(-1, soDV) = 1
    Else
      aPhanBo(-1, soDV) = aPhanBo(-1, soDV) + 1
    End If
  Next i
  For j = 1 To soDV 'Phan bo Giao Vien theo Ty Le
    tmp = aPhanBo(-1, j) / soGV 'Ty le Phan Bo
    For i = 1 To soNhom
      aPhanBo(i, j) = Round(aNhom(i, 2) * tmp, 0)
      aPhanBo(0, j) = aPhanBo(0, j) + aPhanBo(i, j)
      aPhanBo(i, 0) = aPhanBo(i, 0) + aPhanBo(i, j)
    Next i
  Next j

  For j = 1 To soDV 'Dieu chinh tong so theo Don Vi (Cot)
    If tmp < aPhanBo(0, j) Then tmp = aPhanBo(0, j): jC = j 'Don Vi co so Giam Thi Nhieu nhat
    If aPhanBo(0, j) > aPhanBo(-1, j) Then
      i = 0
      Do While aPhanBo(0, j) > aPhanBo(-1, j)
        If i = soNhom Then i = 1 Else i = i + 1
        If aPhanBo(i, 0) > aNhom(i, 2) Then
          aPhanBo(i, j) = aPhanBo(i, j) - 1
          aPhanBo(0, j) = aPhanBo(0, j) - 1
          aPhanBo(i, 0) = aPhanBo(i, 0) - 1
        End If
      Loop
    ElseIf aPhanBo(0, j) < aPhanBo(-1, j) Then
      i = 0
      Do While aPhanBo(0, j) < aPhanBo(-1, j)
        If i = soNhom Then i = 1 Else i = i + 1
        If aPhanBo(i, 0) < aNhom(i, 2) Then
          aPhanBo(i, j) = aPhanBo(i, j) + 1
          aPhanBo(0, j) = aPhanBo(0, j) + 1
          aPhanBo(i, 0) = aPhanBo(i, 0) + 1
        End If
      Loop
    End If
  Next j

  For i = 1 To soNhom 'Dieu chinh tong so theo Nhom (Dong)
    If aPhanBo(i, 0) > aNhom(i, 2) Then
      Do While aPhanBo(i, 0) > aNhom(i, 2)
        If iR = soNhom Then iR = 1 Else iR = iR + 1
        If aPhanBo(iR, 0) < aNhom(iR, 2) Then
          aPhanBo(i, jC) = aPhanBo(i, jC) - 1
          aPhanBo(i, 0) = aPhanBo(i, 0) - 1
          aPhanBo(iR, jC) = aPhanBo(iR, jC) + 1
          aPhanBo(iR, 0) = aPhanBo(iR, 0) + 1
        End If
      Loop
    ElseIf aPhanBo(i, 0) > aNhom(i, 2) Then
      Do While aPhanBo(i, 0) < aNhom(i, 2)
        If iR = soNhom Then iR = 1 Else iR = iR + 1
        If aPhanBo(iR, 0) < aNhom(iR, 2) Then
          aPhanBo(i, jC) = aPhanBo(i, jC) + 1
          aPhanBo(i, 0) = aPhanBo(i, 0) + 1
          aPhanBo(iR, jC) = aPhanBo(iR, jC) - 1
          aPhanBo(iR, 0) = aPhanBo(iR, 0) - 1
        End If
      Loop
    End If
  Next i
End Sub

Sub XoaKetQua()
  Sheets("KetQua").UsedRange.Offset(3).ClearContents
End Sub
 

File đính kèm

  • Danh sach coi thi.xlsb
    54.6 KB · Đọc: 16
Web KT
Back
Top Bottom