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

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi QDuc, 20 Tháng sáu 2006.

2,724 lượt xem

  1. QDuc

    QDuc Thành viên thân thiết

    Bài viết:
    254
    Đã được thích:
    18
    Nơi ở:
    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.
     
    Last edited by a moderator: 20 Tháng sáu 2006
    #1
  2. LeTanLoc

    LeTanLoc Thành viên sơ cấp

    Bài viết:
    5
    Đã được thích:
    0
    Nơi ở:
    Tien Giang
  3. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    433
    Đã được thích:
    38
    Nơi ở:
    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ự!
     

    Các file đính kèm:

    Last edited: 27 Tháng sáu 2006
    #3
  4. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    433
    Đã được thích:
    38
    Nơi ở:
    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
     
    Last edited: 27 Tháng sáu 2006
    #4
  5. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    433
    Đã được thích:
    38
    Nơi ở:
    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
     
    Last edited: 29 Tháng sáu 2006
    #5
  6. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    433
    Đã được thích:
    38
    Nơi ở:
    HCM city

Chia sẻ trang này