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