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

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

QDuc

Thành viên thân thiết
3/6/06
254
18
18
Biển khơi
#1
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:
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#3
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

Sửa lần cuối:
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#4
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 thân thiết
29/6/05
435
38
28
61
HCM city
#5
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:

Thành viên trực tuyến

Không có thành viên trực tuyến.

Xem nhiều