Giúp tôi nạp hàm CROSSTAB() với, các sư huynh!

  • Thread starter QDuc
  • Ngày gửi
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Các anh chị nào biết cách nạp hàm CROSSTAB() vô máy chỉ cho mình với! Cách nào thuận tiện nhất í! Mình không còn đĩa cài đặt ở nhà!!!
Cảm ơn rất nhiều!
7H chiều cùng ngày: Hàm CROSSTAB() trong excel mà bạn!!:
=CROSSTAB( label ; definition; Aray ; create_outline ; createnames; multiplevalues; auto_drilldown)

-------------------------
Bình_OverAC: Mong bác hạn chế sửa bài, mà post thêm bài mới cho mọi người tiện theo dõi tiến trình câu chuyện.
 
Sửa lần cuối bởi điều hành viên:
Khóa học Quản trị dòng tiền
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
569
100
43
66
HCM city
Mình cũng không biết cái hàm đó ở đâu!

/(/hưng mình có cái hàm CROSSTAB(. . .) tự viết đây, ver 0.01 còn đơn sơ lắm!; Xin gởi lên để QDuc & mọi người xài lúc cần hay iêu cầu ~ cái tương tự!
 

Đính kèm

  • Crosstab.rar
    35.2 KB · Lượt xem: 131
Sửa lần cuối:
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
569
100
43
66
HCM city
VER 0.02 đây, xin mời mọi người tham khảo, Miễn fí!

Function CROSSTAB(CSDL As Object) As Variant
Dim MLop(36, 4) As Variant
Dim jZ As Integer, iLop As Integer, TCong As Integer, TNu As Integer '!
Dim SLop As String
SLop = "": TCong = 0
For jZ = 1 To 1500
If Len(CSDL.Cells(jZ, 2)) < 1 Then Exit For
If CSDL.Cells(jZ, 2) <> SLop Then
SLop = CSDL.Cells(jZ, 2): iLop = iLop + 1
MLop(iLop, 1) = SLop: MLop(iLop, 2) = 1
If jZ > 1 Then TCong = TCong + MLop(iLop - 1, 2) 'Mới thêm
If jZ > 1 Then TNu = TNu + MLop(iLop - 1, 3) 'Như trên
If CSDL.Cells(jZ, 1) = 0 Then MLop(iLop, 4) = 1 Else MLop(iLop, 3) = 1
Else
MLop(iLop, 2) = MLop(iLop, 2) + 1
If CSDL.Cells(jZ, 1) = 0 Then
MLop(iLop, 4) = MLop(iLop, 4) + 1
ElseIf CSDL.Cells(jZ, 1) = 1 Then
MLop(iLop, 3) = MLop(iLop, 3) + 1
End If
End If
Next jZ
MLop(iLop + 1, 2) = TCong + MLop(iLop, 2) 'Mới
MLop(iLop + 1, 3) = TNu + MLop(iLop, 3) 'Mới
MLop(iLop + 1, 4) = MLop(iLop + 1, 2) - MLop(iLop + 1, 3) 'Mới
CROSSTAB = MLop
End Function
 
Sửa lần cuối:
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
569
100
43
66
HCM city
Hàm CROSSTAB Ver 1.00 đây

CSDL giống như trên đã nêu:
[Ma], [Ho], [Ten], [NgayCT], [Nu], [MaDV]
. (A) . . . . [C] . . [D] . . [E] . . [F] - là các cột ương ứng
Nhiệm vụ đề ra là viết hàm thống kê số năm tham gia công tác trung bình của từng đơn vị theo tổng & theo từng đối tượng giới tính
Trong VD cơ quan chỉ 7 đơn vị; khoảng 333 người;
Ta chọn vùng trống nào đó đủ 9 * 7 = 63 ô và nhập hàm sau:
=CROSSTABttb( D2: F399) & kết thúc = tổ hợp 3 fím ta sẽ có kết quả tại cột đầu sẽ là các mã ĐVị; Cột tiếp là số lượng nhân viên trong đơn vị tương ứng; cột 3 sẽ là trung bình số năm công tác của từng đơn vị ; cột 4 & 5 thống kê cho giới nữ & C6 & C7 là của Nam
Còn dòng 9 cuối cùng thể hiện các tổng tương ứng
Hàm có nội dung như sau:

Option Explicit: Option Base 1
Function CROSSTABttb(CSDL As Object) As Variant
Dim MSLieu(9, 7) As Variant
Dim Zz As Integer, jJ As Integer: Dim SDV As String
Dim TTuoi As Double, TNu As Double, TNam As Double, TTrB As Double, TTrB0 As Double, TTrB_1 As Double
Dim Tong As Long, TgNu As Long

For Zz = 1 To 999
If Len(CSDL.Cells(Zz, 3)) < 1 Then Exit For
If CSDL.Cells(Zz, 3) <> SDV Then
SDV = CSDL.Cells(Zz, 3): jJ = jJ + 1
If Zz > 1 Then
MSLieu(jJ - 1, 3) = TTuoi / MSLieu(jJ - 1, 2): TTuoi = 0
MSLieu(jJ - 1, 5) = TNu / MSLieu(jJ - 1, 4): MSLieu(jJ - 1, 7) = TNam / MSLieu(jJ - 1, 6)
Tong = Tong + MSLieu(jJ - 1, 2): TgNu = TgNu + MSLieu(jJ - 1, 4)
TTrB = TTrB + MSLieu(jJ - 1, 3): TTrB0 = TTrB0 + MSLieu(jJ - 1, 7)
TTrB_1 = TTrB_1 + MSLieu(jJ - 1, 5)
End If
MSLieu(jJ, 1) = SDV: MSLieu(jJ, 2) = 1
TNu = 0: TNam = 0
TTuoi = (Date - CSDL.Cells(Zz, 1)) / 365.25
If CSDL.Cells(Zz, 2) = 0 Then
MSLieu(jJ, 6) = 1: TNam = (Date - CSDL.Cells(Zz, 1)) / 365.25
Else
MSLieu(jJ, 4) = 1: TNu = (Date - CSDL.Cells(Zz, 1)) / 365.25
End If
Else
MSLieu(jJ, 2) = 1 + MSLieu(jJ, 2)
TTuoi = TTuoi + (Date - CSDL.Cells(Zz, 1)) / 365.25
If CSDL.Cells(Zz, 2) = 0 Then
MSLieu(jJ, 6) = MSLieu(jJ, 6) + 1: TNam = TNam + (Date - CSDL.Cells(Zz, 1)) / 365.25
ElseIf CSDL.Cells(Zz, 2) = 1 Then
MSLieu(jJ, 4) = MSLieu(jJ, 4) + 1: TNu = TNu + (Date - CSDL.Cells(Zz, 1)) / 365.25
End If
End If
Next Zz
MSLieu(jJ, 3) = TTuoi / MSLieu(jJ, 2)
MSLieu(jJ, 5) = TNu / MSLieu(jJ, 4): MSLieu(jJ, 7) = TNam / MSLieu(jJ, 6)
MSLieu(9, 1) = jJ: MSLieu(9, 2) = Tong + MSLieu(jJ, 2)
MSLieu(9, 4) = TgNu + MSLieu(jJ, 4): MSLieu(9, 6) = MSLieu(9, 2) - MSLieu(9, 4)
MSLieu(9, 3) = (TTrB + MSLieu(jJ, 3)) / jJ: MSLieu(9, 7) = (TTrB0 + MSLieu(jJ, 7)) / jJ
MSLieu(9, 5) = (TTrB_1 + MSLieu(jJ, 5)) / jJ
CROSSTABttb = MSLieu

End Function
 
Sửa lần cuối:

Xem nhiều

Webketoan Zalo OA