Hỗ trợ tổng hợp dữ liệu

Liên hệ QC

nicktinhban89

Thành viên mới
Tham gia
11/6/08
Bài viết
23
Được thích
1
Em xin chào cả nhà ạ!
Tình hình là e có nhu cầu như sau ạ
Em có 2 file là file 1 (tương ứng với ngày 1) và file 2 (tương ứng với ngày 2)
Em cần tổng hợp vào file Tổng hợp 2 file này để so sánh kết quả của từng khách hàng số tiền của ngày 1 và ngày 2 có sự biến động như thế nào ạ
Rất mong cả nhà hỗ trợ em
 

File đính kèm

  • Tong Hop.xlsx
    10.9 KB · Đọc: 6
  • File 2.xlsx
    8.8 KB · Đọc: 6
  • File 1.xlsx
    8.8 KB · Đọc: 5
Em xin chào cả nhà ạ!
Tình hình là e có nhu cầu như sau ạ
Em có 2 file là file 1 (tương ứng với ngày 1) và file 2 (tương ứng với ngày 2)
Em cần tổng hợp vào file Tổng hợp 2 file này để so sánh kết quả của từng khách hàng số tiền của ngày 1 và ngày 2 có sự biến động như thế nào ạ
Rất mong cả nhà hỗ trợ em
Có File 3 không bạn hay chỉ có 2 file thôi.
 
Upvote 0
Chỉ có 2 file thôi ạ. Thực tế khi áp dụng là e sẽ tạo file tổng hợp để so sánh sự thay đổi số dư tiền của khách hàng ở 2 ngày khác nhau. Dữ liệu của mỗi ngày lưu ở 1 file (file 1 và file 2)
Tại sao lại chỉ dùng có 2 file và mỗi file chỉ có 1 sheet. Sao không gộp chung vào 1 file có nhiều sheet nhỉ?.
Bài này có thể phát triển thêm là lưu mỗi ngày 1 File (hoặc 1 sheet) như kiểu File 1= ngày 1, file 2 ngày 2, file 3 ngày tiếp theo....., và có thể thêm nhiều KH mới, ngày 1 chỉ có 100 KH, ngày tiếp có thêm 10 KH mới, ngày tiếp theo ....
 
Upvote 0
@Chủ bài đăng: Tất tần tật cho vô 1 file & nếu xài mười năm cũng chỉ ~ 4 vạn dòng cho 1 khách hàng.
????
 
Upvote 0
Tại sao lại chỉ dùng có 2 file và mỗi file chỉ có 1 sheet. Sao không gộp chung vào 1 file có nhiều sheet nhỉ?.
Bài này có thể phát triển thêm là lưu mỗi ngày 1 File (hoặc 1 sheet) như kiểu File 1= ngày 1, file 2 ngày 2, file 3 ngày tiếp theo....., và có thể thêm nhiều KH mới, ngày 1 chỉ có 100 KH, ngày tiếp có thêm 10 KH mới, ngày tiếp theo ....
Bấm nút và xem kết quả
Các file được để chung trong folder TongHopTienHang .
Đường dẫn của tôi có thể khác của bạn.
Mã:
Sub TongHop()
Dim i&, j&, Lr&, t&, k&, n&
Dim Arr(), Res()
Dim Dic As Object, fso As Object
Dim Sh As Worksheet, Ws As Worksheet, Wb As Workbook
Dim file As Variant


 Application.ScreenUpdating = False
 Application.DisplayAlerts = False
 Application.EnableEvents = False
 Application.Calculation = xlCalculationManual

Set fso = CreateObject("Scripting.FileSystemObject")
Set Dic = CreateObject("Scripting.Dictionary")
t = 2
ReDim Res(1 To 100000, 1 To 10)
For Each file In CreateObject("Scripting.FileSystemObject").GetFolder("C:\Users\Admin\Downloads\TongHopTienHang\").Files
    If file.Name Like "File" & "*.xlsx" Then
        Set Wb = Workbooks.Open(file)
        For Each Ws In Worksheets
            If Ws.Name Like "File" & "*" Then
                Lr = Ws.Cells(100000, 1).End(xlUp).Row
                Arr = Ws.Range("A2:D" & Lr).Value
                n = n + 1:
                        Res(1, (n * 2) + 1) = Ws.Name: Res(1, (n * 2) + 2) = Ws.Name
                        Res(2, (n * 2) + 1) = Arr(1, 3): Res(2, (n * 2) + 2) = Arr(1, 4)
                        Res(2, 1) = "MaKH": Res(2, 2) = "Tên KHÁCH HÀNG"
                For i = 2 To UBound(Arr)
                    If Not Dic.Exists(Arr(i, 1)) Then
                        t = t + 1: Dic.Add (Arr(i, 1)), t
                        Res(t, 1) = Arr(i, 1)
                        Res(t, 2) = Arr(i, 2)
                        Res(t, (n * 2) + 1) = Arr(i, 3)
                        Res(t, (n * 2) + 2) = Arr(i, 4)
                    Else
                        k = Dic.Item(Arr(i, 1))
                        Res(k, (n * 2) + 1) = Res(k, (n * 2) + 1) + Arr(i, 3)
                        Res(k, (n * 2) + 2) = Res(k, (n * 2) + 2) + Arr(i, 4)
                    End If
                Next i
            End If
        Next Ws
    Wb.Close
    End If
Next file
 
Set Sh = Sheets("TongHop")
If t Then
    Sh.Range("H4").Resize(100000, (n + 1) * 2).ClearContents
    Sh.Range("H4").Resize(t, (n + 1) * 2) = Res
End If
Set Dic = Nothing

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic

MsgBox "Done"

End Sub
Bạn có thể thử thêm file có tên các Sheet là file... và các sheet có cùng cấu trúc.
 

File đính kèm

  • TongHopTienHang.zip
    37 KB · Đọc: 8
Upvote 0
Có File 3 không bạn hay chỉ có 2 file thôi.

Tại sao lại chỉ dùng có 2 file và mỗi file chỉ có 1 sheet. Sao không gộp chung vào 1 file có nhiều sheet nhỉ?.
Bài này có thể phát triển thêm là lưu mỗi ngày 1 File (hoặc 1 sheet) như kiểu File 1= ngày 1, file 2 ngày 2, file 3 ngày tiếp theo....., và có thể thêm nhiều KH mới, ngày 1 chỉ có 100 KH, ngày tiếp có thêm 10 KH mới, ngày tiếp theo ....
Trên thực tế mình sử dụng nó trong phân tích dữ liệu dư nợ của ngân hàng. Mỗi ngày mình phải xuất 1 file trong file có tổng cộng khoảng trên 36 nghìn khách hàng và nhiều cột dữ liệu từ dư nợ gốc, dư nợ lãi, quá hạn...... Việc mình cần là xem ngày hôm nay và so sánh với bất kỳ một ngày nào trong năm để xem thay đổi của khách hàng như thế nào (bao nhiêu khách hết dư nợ, bao nhiêu khách vay mới...). Mình để mẫu vậy 1 là vì thông tin khách hàng ko thể cung cấp 2 là dữ liệu lớn việc upfile cũng ko tiện. Mình có tìm hiểu qua dùng Querry nhưng chưa thành công
 
Lần chỉnh sửa cuối:
Upvote 0
Trên thực tế mình sử dụng nó trong phân tích dữ liệu dư nợ của ngân hàng. Mỗi ngày mình phải xuất 1 file trong file có tổng cộng khoảng trên 36 nghìn khách hàng và nhiều cột dữ liệu từ dư nợ gốc, dư nợ lãi, quá hạn...... Mình để mẫu vậy 1 là vì thông tin khách hàng ko thể cung cấp 2 là dữ liệu lớn việc upfile cũng ko tiện. Mình có tìm hiểu qua dùng Querry nhưng chưa thành công
Bạn đã thử code và file tôi gửi chưa? kết quả thế nào?
 
Upvote 0
Hihi. Cháu thấy họ đang nói chuyển qua Querry kìa chú. Có lẽ vì thế #6 chưa được sử dụng
Có lẽ là thế. Cũng chả sao. Nhiều người đăng hỏi bài nhưng cũng không theo dõi bài của mình đã được giải đáp hay chưa-( có thể là họ đã có giải đáp rồi hoặc đơn giản là họ không có thời gian, ...), và có xem đến, nhưng không phản hồi lại.
 
Upvote 0
Em xin chào cả nhà ạ!
Tình hình là e có nhu cầu như sau ạ
Em có 2 file là file 1 (tương ứng với ngày 1) và file 2 (tương ứng với ngày 2)
Em cần tổng hợp vào file Tổng hợp 2 file này để so sánh kết quả của từng khách hàng số tiền của ngày 1 và ngày 2 có sự biến động như thế nào ạ
Rất mong cả nhà hỗ trợ em
Cho 2 File cần lấy cho vào chung với Folder chứa file tổng hợp chạy code.
Mã:
Sub tonghop()
    Dim i As Long, lr As Long, dic As Object, dk As String, arr, kq, cn As Object, duonglinh As String, sql As String, b As Long, a As Long
    Set dic = CreateObject("scripting.dictionary")
    Set cn = CreateObject("ADODB.Connection")
    duonglinh = ThisWorkbook.Path & "\File 2.xlsx"
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & duonglinh & ";Extended Properties=""Excel 12.0;HDR=No"";"
    sql = "Select * From [File2$A3:D100000]  where f2 is not null"
    arr = chuyenmang(cn.Execute(sql).getrows)
    ReDim kq(1 To UBound(arr) + 1000, 1 To 6)
    For i = 1 To UBound(arr)
        dk = arr(i, 1)
        If Not dic.exists(dk) Then
           a = a + 1
           dic.Add dk, a
           kq(a, 1) = arr(i, 1)
           kq(a, 2) = arr(i, 2)
           kq(a, 3) = arr(i, 3)
           kq(a, 4) = arr(i, 4)
        End If
    Next i
    cn.Close
    duonglinh = ThisWorkbook.Path & "\File 1.xlsx"
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & duonglinh & ";Extended Properties=""Excel 12.0;HDR=No"";"
    sql = "Select * From [File1$A3:D100000]  where f2 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
           kq(a, 1) = arr(i, 1)
           kq(a, 2) = arr(i, 2)
           kq(a, 5) = arr(i, 3)
           kq(a, 6) = arr(i, 4)
        Else
           b = dic.Item(dk)
           kq(b, 5) = arr(i, 3)
           kq(b, 6) = arr(i, 4)
        End If
    Next i
    cn.Close
    With Sheet1
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        If lr > 5 Then .Range("A6:F" & lr).ClearContents
        .Range("A6:F6").Resize(a).Value = kq
    End With
    Set dic = Nothing
    Set cn = 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
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom