phamxuanyen
Thành viên mới

- Tham gia
- 1/9/08
- Bài viết
- 42
- Được thích
- 7
Đã code xong. CHờ mọi người không ai trả lời thì tôi sẽ post sauem 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 ......................
Viết tiếp khúc chấm chấm nha.......................
Danh sách nhân sự | 7 | 10 | ||||||||||||||||
TT | Mã NS | HỌ 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 1 | Nhóm 2 | Nhóm 3 | Nhóm 4 | Nhóm 5 | Nhóm 6 | Nhóm 7 | Sỉ số | 8 | ||||||
48 | BQT00 | Bùi Quang Trung | Trường THPT Sông Đốc | 16 | 15 | 16 | 15 | 16 | 15 | 16 | 109 | 7 | ||||||
7 | BVH00 | Bùi Văn Hiếu | Trường THPT Phan Ngọc Hiển | BMT00 | HCT00 | LMT00 | NLQ00 | NTL00 | PXY00 | TNY00 | 6 | |||||||
40 | BVK00 | Bùi Văn Khuyến | Trường THPT Tắc Vân | BQT00 | HNP00 | LQT00 | NLR00 | NTL13 | TBH00 | TPD00 | 5 | |||||||
2 | CMK00 | Châu Minh Khoa | Trườ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ễm | Trường Đại học Y Dược Cần Thơ | CMT00 | HVN00 | NAN00 | NNF00 | NVB00 | TFL00 | TTN00 | 1 | |||||||
5 | DQQ00 | Dương Quốc Quang | Trường THPT Quách Văn Phẩm | CVN00 | HVS00 | NDT00 | NNN00 | NVH00 | THB00 | TTS00 | 0 | |||||||
85 | DTT00 | Dương Thanh Thuận | Trườ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ấn | Trung tâm Y tế Phú Tân | DTT00 | LHK00 | NHP00 | NTD00 | NXM00 | THP00 | TVF00 | ||||||||
78 | FCL00 | Đỗ Chúc Linh | Trườ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ương | Trường THPT Phú Hưng | FCL00 | LHV00 | NHT01 | NTG00 | PMH00 | TMT00 | TVU00 | ||||||||
97 | HBL00 | Huỳnh Thị Bé Lành | Trường THPT Cà Mau | FHN00 | LMA00 | NKP00 | NTK00 | PTT00 | TNQ00 | TVV00 | ||||||||
103 | HCT00 | Hồ Chí Tâm | Trung 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ơ |
Số 16, 17 cho vào nhóm nào rồi Bạn
Do lệch múi giờ đó. Hí hí.anh @HieuCD bị gọi lên trả bài sao không thấy gì hết vậy
nằm khuất bên phảiSố 16, 17 cho vào nhóm nào rồi Bạn
Bộ hỏng thấy người quen hả. Coi chừng bị chửi nhe.Viết tiếp khúc chấm chấm nha.
Danh sách có 500 người, chia thành 499 nhóm, 498 nhóm đầu có 1 người.
Mình chỉnh code tiếp nha.
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 đượcem 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 ......................
Bạn nầy ở vùng sông nước cực nam đất ViệtBộ hỏng thấy người quen hả. Coi chừng bị chửi nhe.
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.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
Xin loi các anh! để em xóaSao quay quay thì không được anh ạ.
Nhưng kệ thôi, giờ mà 'tố cáo, khiếu nại' là bị coi là 'sân si, lắm mồm'. @@
View attachment 249572
Mục đích chia nhóm là gì? Nếu cần thiết mình sẽ viết codeem 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 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 nhaMục đích chia nhóm là gì? Nếu cần thiết mình sẽ viết code
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
dùng công thức được không ?khi nào các anh có thời gian rảnh giúp em nha!
Vậy là số diểm trường đã biết & số HS ở mỗi điểm trường cũng đã biết.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à Sheet2Mụ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
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