hoangruazbin
Thành viên mới

- Tham gia
- 27/6/19
- Bài viết
- 32
- Được thích
- 3
Lần đầu tiên phân tích dữ liệu từ một mảng quá phê như vậy, đã thiệt đó!Là do em xoá chưa hết thôi anh, khi làm thủ công em để dự phòng khi có phát sinh bổ sung các trường hợp khác trong Trình độ đào tạo.
Sub PhanTichDuLieu()
Dim blnExtra As Boolean
Dim arrData, arrBaoCao, arrTemp(1 To 1, 2 To 34)
Dim shData As Worksheet, shBaoCao As Worksheet
Dim c As Long, e As Long, h As Long, i As Long, j As Long, k As Long, n As Long, r As Long, t As Long, u As Long
Set shData = Sheets("data")
Set shBaoCao = Sheets("baocao")
e = shData.Range("A" & shData.Rows.Count).End(xlUp).Row
arrData = shData.Range("A6:I" & e).Value
u = UBound(arrData)
ReDim arrBaoCao(1 To u, 1 To 34)...
Cái gì để nhận biết "Gián tiếp" hay "Trực tiếp" hay "Khác" vậy bạn? Nếu như thợ cơ khí nhưng người ta cũng có bằng đại học thì sao?Chào các Anh Chị trong diễn đàn,
Em có bảng dữ liệu cần lọc từ sheet "data" sang sheet "baocao" theo file đính kèm,
Rất mong các Anh Chị giúp đỡ, em cảm ơn Anh Chị.
Cảm ơn Anh!Cái gì để nhận biết "Gián tiếp" hay "Trực tiếp" hay "Khác" vậy bạn? Nếu như thợ cơ khí nhưng người ta cũng có bằng đại học thì sao?
Chỉ có 4 phòng ban thôi phải không em?Cảm ơn Anh!
Căn cứ cột "Bậc lương" để xác định, cụ thể bậc x/8 là "Gián tiếp", bậc x/7 là "Trực tiếp" và bậc x/4 là "Khác".
Thợ cơ khí có bằng đại học mà bậc lương là x/8 hoặc x/4 thì cũng không được tính là "Gián tiếp".
Rất mong Anh giúp!
Khoảng 20 bộ phận, khi có nhu cầu em có thể thống kê mở rộng đến các Tổ trong các Bộ phận nữa Anh ạ!Chỉ có 4 phòng ban thôi phải không em?
Cấu trúc giống như vậy hết? Dùng số La Mã để đánh số phòng ban?Khoảng 20 bộ phận, khi có nhu cầu em có thể thống kê mở rộng đến các Tổ trong các Bộ phận nữa Anh ạ!
Dạ Anh, cấu trúc vẫn vậy. Nếu code viết phụ thuộc vào việc đánh số các phòng ban bằng số La Mã thì em sẽ để số La Mã cũng không ảnh hưởng gì Anh ạ, em gửi lại file có thêm các Tổ trong các Bộ phận để Anh dễ hình dung hơn ạ.Cấu trúc giống như vậy hết? Dùng số La Mã để đánh số phòng ban?
Nên chỉnh lại kiểu dữ liệu của cột 'Bật Lương' cho đồng nhất nha bạn.Dạ Anh, cấu trúc vẫn vậy. Nếu code viết phụ thuộc vào việc đánh số các phòng ban bằng số La Mã thì em sẽ để số La Mã cũng không ảnh hưởng gì Anh ạ, em gửi lại file có thêm các Tổ trong các Bộ phận để Anh dễ hình dung hơn ạ.
Em đã chỉnh "Bậc lương" về kiểu chuỗi, Anh xem giúp ạ.Nên chỉnh lại kiểu dữ liệu của cột 'Bật Lương' cho đồng nhất nha bạn.
Trình độ đào tạo và bậc lương là không cố định đúng không bạn?Em đã chỉnh "Bậc lương" về kiểu chuỗi, Anh xem giúp ạ.
Dạ đúng Anh, trình độ đào tạo gần như cố định (trừ trường hợp có bằng cấp bổ sung), còn bậc thì thay đổi theo niên hạn Anh ạ.Trình độ đào tạo và bậc lương là không cố định đúng không bạn?
Dạ, trình độ và bậc nhiều hơn Anh ạ, em ví dụ nên lược bớt đi.Không, ý tôi nói là:
1. Trình độ đào tạo của bạn hiện tại trong báo biểu là 6 cái.
View attachment 264276
2. Bậc thợ là 9 bậc.
==> 1 & 2 có tăng thêm hay giảm bớt gì không?
Không biết dữ liệu của em còn thiếu hoặc có nội dung chưa cụ thể nào không ạ? Nếu được các Anh giúp em nhé, em cảm ơn các Anh!Cấu trúc giống như vậy hết? Dùng số La Mã để đánh số phòng ban?
Vấn đề phân tích dữ liệu của bạn không phải là chuyện dễ, bạn phải chờ thôi.Không biết dữ liệu của em còn thiếu hoặc có nội dung chưa cụ thể nào không ạ? Nếu được các Anh giúp em nhé, em cảm ơn các Anh!
Bạn tạo 1 Sheet danh mục như hìnhDạ, trình độ và bậc nhiều hơn Anh ạ, em ví dụ nên lược bớt đi.
Sub TongHop_HLMT()
Dim strTuoi As String, strDKTinhTuoi As String, strSQL As String
Dim i As Integer
strTuoi = "Int(Format(Date(),'yyyy.MMdd')-Format(F5,'yyyy.MMdd'))"
strDKTinhTuoi = "IIf(" & strTuoi & "<25,1,0)+IIf(" & strTuoi & ">=25 and " & strTuoi & "<=30,1,0)+IIf(" & strTuoi & ">30,1,0) as TongPhanLoaiTuoi,IIf(" & strTuoi & "<25,1,0) as [<25],IIf(" & strTuoi & ">=25 and " & strTuoi & "<=30,1,0) as [>=25 <=30],IIf(" & strTuoi & ">30,1,0) as [>30] "
strSQL = "TRANSFORM Count([tbl].[TongGioiTinh]) " & _
"SELECT [tbl].[BoPhan], Sum([tbl].TongGioiTinh) AS GioiTinh_Total, Sum([tbl].Nam) AS Nam, Sum([tbl].Nu) AS Nu, Sum([tbl].TongPhanLoaiTuoi) AS PhanLoaiTuoi_Total, Sum([tbl].[<25]) AS [<25_Total], Sum([tbl].[>=25 <=30]) AS [>=25 <=30_Total], Sum([tbl].[>30]) AS [>30_Total], Sum([tbl].TongGioiTinh) AS Tong " & _
"FROM (Select a.F6 as BoPhan,1 as TongGioiTinh,IIF(a.F4='Nam',1,0) as Nam,IIF(a.F4='Nam',0,1) as Nu," & strDKTinhTuoi & ",b.F3 & chr(10) & chr(13) & b.F1 & chr(10) & chr(13) & b.F2 & chr(10) & chr(13) & a.F7 & a.F8 as Nhom from [Data$] a Inner Join [DanhMuc$] b on a.F9=b.F1) [tbl] " & _
"GROUP BY [tbl].[BoPhan] " & _
"PIVOT [tbl].[Nhom];"
With CreateObject("ADODB.Recordset")
.Open (strSQL), "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No;Imex=1"""
Sheet4.Range("A2").CopyFromRecordset .DataSource
For i = 0 To .Fields.Count - 1
Sheet4.Cells(1, i + 1) = .Fields(i).Name
Next
End With
End Sub
Cảm ơn Anh đã giúp đỡ!
Là do em xoá chưa hết thôi anh, khi làm thủ công em để dự phòng khi có phát sinh bổ sung các trường hợp khác trong Trình độ đào tạo.Sheet baocao cột T để không, nó để làm gì vậy bạn?
Lần đầu tiên phân tích dữ liệu từ một mảng quá phê như vậy, đã thiệt đó!Là do em xoá chưa hết thôi anh, khi làm thủ công em để dự phòng khi có phát sinh bổ sung các trường hợp khác trong Trình độ đào tạo.
Sub PhanTichDuLieu()
Dim blnExtra As Boolean
Dim arrData, arrBaoCao, arrTemp(1 To 1, 2 To 34)
Dim shData As Worksheet, shBaoCao As Worksheet
Dim c As Long, e As Long, h As Long, i As Long, j As Long, k As Long, n As Long, r As Long, t As Long, u As Long
Set shData = Sheets("data")
Set shBaoCao = Sheets("baocao")
e = shData.Range("A" & shData.Rows.Count).End(xlUp).Row
arrData = shData.Range("A6:I" & e).Value
u = UBound(arrData)
ReDim arrBaoCao(1 To u, 1 To 34)
arrTemp(1, 2) = "C" & ChrW(7897) & "ng:"
For r = 1 To u
If arrData(r, 2) = "" Then
c = c + 1
If IsNumeric(Right(arrData(r, 1), 1)) Then
arrBaoCao(c, 1) = "'+"
If Not blnExtra Then
blnExtra = True
h = c - 1
End If
Else
n = n + 1
arrBaoCao(c, 1) = n
blnExtra = False
End If
arrBaoCao(c, 2) = arrData(r, 3)
GoTo NextStep
End If
arrBaoCao(c, 3) = arrBaoCao(c, 3) + 1
arrTemp(1, 3) = arrTemp(1, 3) + 1
If blnExtra Then arrBaoCao(h, 3) = arrBaoCao(h, 3) + 1
If UCase(arrData(r, 4)) = "NAM" Then
arrBaoCao(c, 4) = arrBaoCao(c, 4) + 1
arrTemp(1, 4) = arrTemp(1, 4) + 1
If blnExtra Then arrBaoCao(h, 4) = arrBaoCao(h, 4) + 1
Else
arrBaoCao(c, 5) = arrBaoCao(c, 5) + 1
arrTemp(1, 5) = arrTemp(1, 5) + 1
If blnExtra Then arrBaoCao(h, 5) = arrBaoCao(h, 5) + 1
End If
arrBaoCao(c, 6) = arrBaoCao(c, 3)
arrBaoCao(c, 10) = arrBaoCao(c, 3)
arrBaoCao(c, 21) = arrBaoCao(c, 3)
arrTemp(1, 6) = arrTemp(1, 3)
arrTemp(1, 10) = arrTemp(1, 3)
arrTemp(1, 21) = arrTemp(1, 3)
If blnExtra Then
arrBaoCao(h, 6) = arrBaoCao(h, 3)
arrBaoCao(h, 10) = arrBaoCao(h, 3)
arrBaoCao(h, 21) = arrBaoCao(h, 3)
End If
t = Format(Date - arrData(r, 5), "y")
If t < 25 Then
arrBaoCao(c, 7) = arrBaoCao(c, 7) + 1
arrTemp(1, 7) = arrTemp(1, 7) + 1
If blnExtra Then arrBaoCao(h, 7) = arrBaoCao(h, 7) + 1
ElseIf t > 30 Then
arrBaoCao(c, 9) = arrBaoCao(c, 9) + 1
arrTemp(1, 9) = arrTemp(1, 9) + 1
If blnExtra Then arrBaoCao(h, 9) = arrBaoCao(h, 9) + 1
Else
arrBaoCao(c, 8) = arrBaoCao(c, 8) + 1
arrTemp(1, 8) = arrTemp(1, 8) + 1
If blnExtra Then arrBaoCao(h, 8) = arrBaoCao(h, 8) + 1
End If
Select Case Right(arrData(r, 9), 1)
Case "8"
arrBaoCao(c, 11) = arrBaoCao(c, 11) + 1
arrTemp(1, 11) = arrTemp(1, 11) + 1
If blnExtra Then arrBaoCao(h, 11) = arrBaoCao(h, 11) + 1
If UCase(Left(arrData(r, 7), 3)) = "CAO" Then
arrBaoCao(c, 13) = arrBaoCao(c, 13) + 1
arrTemp(1, 13) = arrTemp(1, 13) + 1
If blnExtra Then arrBaoCao(h, 13) = arrBaoCao(h, 13) + 1
Else
arrBaoCao(c, 12) = arrBaoCao(c, 12) + 1
arrTemp(1, 12) = arrTemp(1, 12) + 1
If blnExtra Then arrBaoCao(h, 12) = arrBaoCao(h, 12) + 1
End If
arrBaoCao(c, 22) = arrBaoCao(c, 22) + 1
arrTemp(1, 22) = arrTemp(1, 22) + 1
If blnExtra Then arrBaoCao(h, 22) = arrBaoCao(h, 22) + 1
If Left(arrData(r, 9), 1) = "1" Then
arrBaoCao(c, 23) = arrBaoCao(c, 23) + 1
arrTemp(1, 23) = arrTemp(1, 23) + 1
If blnExtra Then arrBaoCao(h, 23) = arrBaoCao(h, 23) + 1
Else
arrBaoCao(c, 24) = arrBaoCao(c, 24) + 1
arrTemp(1, 24) = arrTemp(1, 24) + 1
If blnExtra Then arrBaoCao(h, 24) = arrBaoCao(h, 24) + 1
End If
Case "7"
arrBaoCao(c, 14) = arrBaoCao(c, 14) + 1
arrTemp(1, 14) = arrTemp(1, 14) + 1
If blnExtra Then arrBaoCao(h, 14) = arrBaoCao(h, 14) + 1
Select Case UCase(Right(arrData(r, 8), 2))
Case "CK"
arrBaoCao(c, 15) = arrBaoCao(c, 15) + 1
arrTemp(1, 15) = arrTemp(1, 15) + 1
If blnExtra Then arrBaoCao(h, 15) = arrBaoCao(h, 15) + 1
Case "ÀN"
arrBaoCao(c, 16) = arrBaoCao(c, 16) + 1
arrTemp(1, 16) = arrTemp(1, 16) + 1
If blnExtra Then arrBaoCao(h, 16) = arrBaoCao(h, 16) + 1
Case "PT"
arrBaoCao(c, 17) = arrBaoCao(c, 17) + 1
arrTemp(1, 17) = arrTemp(1, 17) + 1
If blnExtra Then arrBaoCao(h, 17) = arrBaoCao(h, 17) + 1
End Select
arrBaoCao(c, 28) = arrBaoCao(c, 28) + 1
arrTemp(1, 28) = arrTemp(1, 28) + 1
If blnExtra Then arrBaoCao(h, 28) = arrBaoCao(h, 28) + 1
Select Case Left(arrData(r, 9), 1)
Case "1"
arrBaoCao(c, 29) = arrBaoCao(c, 29) + 1
arrTemp(1, 29) = arrTemp(1, 29) + 1
If blnExtra Then arrBaoCao(h, 29) = arrBaoCao(h, 29) + 1
Case "2"
arrBaoCao(c, 30) = arrBaoCao(c, 30) + 1
arrTemp(1, 30) = arrTemp(1, 30) + 1
If blnExtra Then arrBaoCao(h, 30) = arrBaoCao(h, 30) + 1
Case "3"
arrBaoCao(c, 31) = arrBaoCao(c, 31) + 1
arrTemp(1, 31) = arrTemp(1, 31) + 1
If blnExtra Then arrBaoCao(h, 31) = arrBaoCao(h, 31) + 1
Case "4"
arrBaoCao(c, 32) = arrBaoCao(c, 32) + 1
arrTemp(1, 32) = arrTemp(1, 32) + 1
If blnExtra Then arrBaoCao(h, 32) = arrBaoCao(h, 32) + 1
Case "5"
arrBaoCao(c, 33) = arrBaoCao(c, 33) + 1
arrTemp(1, 33) = arrTemp(1, 33) + 1
If blnExtra Then arrBaoCao(h, 33) = arrBaoCao(h, 33) + 1
Case Else
arrBaoCao(c, 34) = arrBaoCao(c, 34) + 1
arrTemp(1, 34) = arrTemp(1, 34) + 1
If blnExtra Then arrBaoCao(h, 34) = arrBaoCao(h, 34) + 1
End Select
Case Else
If UCase(Right(arrData(r, 8), 2)) = "XE" Then
arrBaoCao(c, 18) = arrBaoCao(c, 18) + 1
arrBaoCao(c, 19) = arrBaoCao(c, 18)
arrTemp(1, 18) = arrTemp(1, 18) + 1
arrTemp(1, 19) = arrTemp(1, 18)
If blnExtra Then
arrBaoCao(h, 18) = arrBaoCao(h, 18) + 1
arrBaoCao(h, 19) = arrBaoCao(h, 18)
End If
End If
arrBaoCao(c, 25) = arrBaoCao(c, 25) + 1
arrTemp(1, 25) = arrTemp(1, 25) + 1
If blnExtra Then arrBaoCao(h, 25) = arrBaoCao(h, 25) + 1
If Left(arrData(r, 9), 1) = "1" Then
arrBaoCao(c, 26) = arrBaoCao(c, 26) + 1
arrTemp(1, 26) = arrTemp(1, 26) + 1
If blnExtra Then arrBaoCao(h, 26) = arrBaoCao(h, 26) + 1
Else
arrBaoCao(c, 27) = arrBaoCao(c, 27) + 1
arrTemp(1, 27) = arrTemp(1, 27) + 1
If blnExtra Then arrBaoCao(h, 27) = arrBaoCao(h, 27) + 1
End If
End Select
NextStep:
Next
c = c + 1
For r = 2 To 34
arrBaoCao(c, r) = arrTemp(1, r)
Next
shBaoCao.Range("A8").Resize(c, 34).Value = arrBaoCao
End Sub
Quá tuyệt vời Anh ạ, em cảm ơn Anh rất nhiều,Lần đầu tiên phân tích dữ liệu từ một mảng quá phê như vậy, đã thiệt đó!
Nếu muốn tôi cập nhật cho bạn thì bạn liệt kê toàn bộ lên sheet data và các cột ở sheet baocao. VBA các cột được cố định nên bạn xóa hay thêm đều xảy ra lỗi. Cho nên bạn lường tất cả các trường hợp rồi tôi làm giúp một lần luôn chứ tôi không có thời gian sửa chữa cho bạn nhiều lần được đâu. Làm sẵn đi, sáng mai rảnh tôi update cho.Quá tuyệt vời Anh ạ, em cảm ơn Anh rất nhiều,
Trường hợp em thay khoảng tuổi khác để thống kê (hoặc khi xoá bớt cột đi thì cột tổng vẫn không đổi), thêm các cột Trung cấp sau cột cao đẳng, hoặc thêm bậc 3/8, 4/8 ... thì chưa được, vậy nhờ anh chỉnh code giúp em mà các cột được thống kê theo tiêu đề định sẵn được không ạ.
Phiền anh giúp em thêm lần nữa.
Thực chất em nhờ Anh viết code để xuất ra 1 sheet trung gian, sau đó mới xào xáo thành báo cáo vì có nhiều loại mẫu khác nhau.Nếu muốn tôi cập nhật cho bạn thì bạn liệt kê toàn bộ lên sheet data và các cột ở sheet baocao. VBA các cột được cố định nên bạn xóa hay thêm đều xảy ra lỗi. Cho nên bạn lường tất cả các trường hợp rồi tôi làm giúp một lần luôn chứ tôi không có thời gian sửa chữa cho bạn nhiều lần được đâu. Làm sẵn đi, sáng mai rảnh tôi update cho.