Nhờ sửa code tính tổng khi gộp dữ liệu bằng ADO

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Mình cần anh chị em giúp đỡ sửa đoạn code trong file tổng kết (code này mót từ Mr.DBA) hoặc viết giúp đoạn code mới giống vậy, để có thể vừa gom được dữ liệu từ các file con (chọn được file nào muốn gom dữ liệu), vừa tính tổng điểm của những người trùng như trong sheet tên PowerQuery. Rất cảm ơn anh chị giúp đỡ ạ.

Thử code này nhé.

Sub TongHop()
    Dim cn As Object, SQL As String, duonglinh, arr, dic As Object
    Dim ketqua(1 To 10000, 1 To 2), b As Long, a As Long, i As Long, lr As Long, dk As String
    Set dic = CreateObject("scripting.dictionary")
    Set cn = CreateObject("ADODB.Connection")  'khai báo cho ADO
    Application.ScreenUpdating = False 'Tat cap nhap man hinh
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True 'cho chon nhieu file
        .Filters.Add "Microsoft Excel Files", "*.xls; *.xlsx; *.xlsb; *.xlsm", 1 'chi hien cac duoi excel
        If Not .Show = -1 Then  'Kiêm tra xem da chon file chua
            MsgBox "Ban da khong chon tong hop", vbInformation, "Thông Báo"
            Exit Sub
        End If
        For Each duonglinh In .SelectedItems
            cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & duonglinh & ";Extended Properties=""Excel 12.0;HDR=No"";" ' mo file excel
            SQL = "SELECT * FROM [Tongket$C3:D10000] where f1 is not null"
            arr = chuyenmang(cn.Execute(SQL).GetRows)
            For i = 1 To UBound(arr)
                dk = arr(i, 1)
                If Not dic.exists(dk) Then
                    a = a + 1
                    dic.Add dk, a
                    ketqua(a, 1) = arr(i, 1)
                    ketqua(a, 2) = arr(i, 2)
                Else
                   b = dic.Item(dk)
                   ketqua(b, 2) = ketqua(b, 2) + arr(i, 2)
                End If
            Next i
            cn.Close 'dong file
        Next
    End With
    With Sheets("baocao")
        lr = .Range("A" & Rows.Count).End(xlUp).Row 'xác dinh dong cuoi cua bang tong hop
        If lr > 1 Then .Range("A2:B" & lr).ClearContents 'neu dong cuoi lon hon 15 thi xoa
        If a Then .Range("A2:B2").Resize(a).Value = ketqua
    End With
    Application.ScreenUpdating = True 'bat cap nhap man hinh
    Set cn = Nothing
    Set dic = Nothing
End Sub
Private Function chuyenmang(ByVal arr) As Variant
    Dim kq(), i As Long, j As Long
    ReDim kq(1 To UBound(arr, 2) + 1, 1 To UBound(arr, 1) + 1)
    For i = LBound(arr, 2) To UBound(arr, 2)
        For j = LBound(arr, 1) To UBound(arr, 1)
            kq(i + 1, j + 1) = arr(j, i)
        Next j
    Next i
    chuyenmang = kq
End Function

www.giaiphapexcel.com/diendan/threads/nh%E1%BB%9D-s%E1%BB%ADa-code-t%C3%ADnh-t%E1%BB%95ng-khi-g%E1%BB%99p-d%E1%BB%AF-li%E1%BB%87u-b%E1%BA%B1ng-ado.163339/post-1089541

Ứng dụng AI và Chat GPT trong Quản trị nhân sự
Khóa học SprinGO phù hợp

Ứng dụng AI và Chat GPT trong Quản trị nhân sự

Học xong khóa này, học viên có thể: Hiểu đúng bản chất AI, các nhóm AI phổ biến và cách AI “hoạt động” ở...

Xem khóa học
★★★★★ 5 ★ 1 👤 5 ▥ 0
Quảng cáo

Bạn nên đọc

Bình luận

Quảng cáo

Cũ vẫn chất

Xem thêm