Tổng hợp dữ liệu không cần mở File (1 người xem)

  • Thread starter Thread starter huy vu
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

huy vu

Thành viên hoạt động
Tham gia
29/2/12
Bài viết
164
Được thích
1
Em có câu hỏi sau, mong các thành viên giúp đỡ.
Em có file Tổng hợp, và nhiều file Số tiền các tháng T1, T2, T3....
Cấu trúc các file:
- File Tong Hop gồm trường: Code, Sotien1, VAT1, Sotien2.....
- File số tiền gồm 3 trường: Code, SoTien, VAT
Bình thường e hay copy dữ liệu file T1, T2... vào các sheet của file Tổng hợp
Rồi từ đó dùng phương thức Find để tìm kiếm theo Code của sheet Tổng hợp từ các sheet T1, T2...
Bài toán đặt ra là dữ liệu T1, T2 càng ngày càng nhiều, copy vào file Tổng hợp làm nặng file.
Vậy có cách nào mà Tổng hợp dữ liệu không cần copy các file T1, T2 vào các sheet của file tổng hợp không?
Tổng hợp dữ liệu không cần mở file. Hình như ADO có thể làm được việc này, hoặc bằng phương thức khác, mong các thành viên giúp đỡ!!!
Em xin chân thành cảm ơn!
 

File đính kèm

BÀI 20 Em test lỗi dòng này Anh
With Workbooks.Open(ObjFile.Name, 0)
 
Upvote 0
Thì bạn sửa lại vầy đi
PHP:
StrRequest = "SELECT * FROM [Sheet2$A2:E10000]"
cũng làm như vậy đó vì nhưng mà không được, vì hồi chiều có xem mục ADO của anh hai lúa miền tây, thấy cái này hay hay muốn tìm hiểu thôi, hình như nó khác 1 ít với các câu lệnh trước kia học SQL
 
Upvote 0
Thử cái rừng này coi sao, cũng chưa hiểu hết ý bạn muốn tổng hợp kiểu gì
PHP:
Sub Tonghop()
Dim fso As Object, Dic As Object
Dim ObjFile As Object, i&, n&, k&, x&, path$
Dim tieude(), Res(), Data(), Code(1 To 65536, 1 To 1)
path = ThisWorkbook.path
Set fso = CreateObject("Scripting.FileSystemObject")
Set Dic = CreateObject("scripting.dictionary")
With fso.GetFolder(ThisWorkbook.path)
   For Each ObjFile In .Files
      If fso.GetExtensionName(ObjFile) Like "xls*" Then
         If Left(ObjFile.Name, 2) <> "~$" Then
            If ObjFile.Name <> ThisWorkbook.Name Then
               n = n + 2
               With Workbooks.Open(ObjFile.Name, 0)
                  With .ActiveSheet
                     Data = .Range("A2", .[C65536].End(3)).Value
                     ReDim Preserve Res(1 To 65536, 1 To n)
                     ReDim Preserve tieude(1 To n)
                     tieude(n - 1) = fso.getbaseName(ObjFile)
                     For i = 1 To UBound(Data)
                        If Not Dic.exists(Data(i, 1)) Then
                           k = k + 1
                           Dic.Add Data(i, 1), k
                           Code(k, 1) = Data(i, 1)
                           Res(k, n - 1) = Data(i, 2)
                           Res(k, n) = Data(i, 3)
                        Else
                           x = Dic.Item(Data(i, 1))
                           Res(x, n - 1) = Data(i, 2)
                           Res(x, n) = Data(i, 3)
                        End If
                     Next
                  End With
                  .Close False
               End With
            End If
         End If
      End If
   Next
End With
Sheets("DATA").[D4].Resize(k) = Code
Sheets("DATA").[O2].Resize(, n) = tieude
Sheets("DATA").[O4].Resize(k, n) = Res
End Sub

Cái nào khó quá thì cho qua đi. Từ từ rồi tính sau.
Code của anh Hải nhìn như tranh vẽ, trông thích quá, cảm ơn anh. Để em test xem sao.
 
Upvote 0
theo như bài 10, thì mỗi file con chỉ có 1 sheet thôi, bây giờ giả sử như mỗi file con có 3 sheet và ở file tổng hợp có 3 sheet tương ứng, bây giờ mình muốn lấy dữ liệu từ các file con vào file lớn, giống như bài 10, mà mở rộng thêm nhiều sheet thôi
tôi có thấy file của anh hai lúa như thế này
StrRequest = "SELECT * FROM [Sheet2$A2:E10000]"
nhưng áp dụng trong code thì bị lỗi, xin cảm ơn
 
Upvote 0
theo như bài 10, thì mỗi file con chỉ có 1 sheet thôi, bây giờ giả sử như mỗi file con có 3 sheet và ở file tổng hợp có 3 sheet tương ứng, bây giờ mình muốn lấy dữ liệu từ các file con vào file lớn, giống như bài 10, mà mở rộng thêm nhiều sheet thôi
tôi có thấy file của anh hai lúa như thế này
StrRequest = "SELECT * FROM [Sheet2$A2:E10000]"
nhưng áp dụng trong code thì bị lỗi, xin cảm ơn
Tôi tạm viết như sau, bạn tự chỉnh và phát triển ra nhé.

Mã:
Sub Main()
    Dim ObjConn As Object, RS As Object, Files, sht
    Dim StrRequest As String, Path As String, i As Integer, iSht As Integer
    Path = ThisWorkbook.Path
    Files = Array("T1.xlsb", "T2.xlsb", "T3.xlsb")
    sht = Array("T1", "T2", "T3")
    Set RS = CreateObject("ADODB.Recordset")

    For i = 0 To UBound(Files)
        Set ObjConn = GetExcelConnection(Path & "\" & Files(i), 0)
        StrRequest = ""
        For iSht = 0 To UBound(sht)
            StrRequest = "SELECT * FROM [" & sht(iSht) & "$A2:E10000]"
            RS.Open StrRequest, ObjConn, 3, 1
            Sheets(sht(iSht)).[A65536].End(3).Offset(1).CopyFromRecordset RS
            RS.Close
        Next
        ObjConn.Close
    Next
    Set RS = Nothing
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
cũng làm như vậy đó vì nhưng mà không được, vì hồi chiều có xem mục ADO của anh hai lúa miền tây, thấy cái này hay hay muốn tìm hiểu thôi, hình như nó khác 1 ít với các câu lệnh trước kia học SQL

StrRequest = "SELECT * FROM [Sheet2$A2:E10000]"

Câu lệnh này hoàn toàn căn bản. Đâu có chỗ nào đặc biệt mà gọi là khác?
 
Upvote 0
Giải sử trong folder em có 3 file con có dữ liệu như trong file, và 1 file tổng hợp, em muốn đưa dữ liệu từ các file con vào file tổng hợp như mẫu thì như thế nào? em có kèm theo file và có đáp số mẫu cần lấy trong file tổng hợp, em thấy cái này hay, chắc chắn trong tương lai phải cần tới nên tu luyện trước để dành đó. Xin cảm ơn anh hai lúa đã quan tâm
 

File đính kèm

Upvote 0
Giải sử trong folder em có 3 file con có dữ liệu như trong file, và 1 file tổng hợp, em muốn đưa dữ liệu từ các file con vào file tổng hợp như mẫu thì như thế nào? em có kèm theo file và có đáp số mẫu cần lấy trong file tổng hợp, em thấy cái này hay, chắc chắn trong tương lai phải cần tới nên tu luyện trước để dành đó. Xin cảm ơn anh hai lúa đã quan tâm

Trong bài #29 đã làm rồi mà bạn.
 
Upvote 0
khi chạy nó báo lỗi kết nối không được anh ơi
Picture1.jpg
cái này em chạy trên office 10. không biết là bộ office của em có vấn đề gì không, mà dạo này VBA trục trặc quá
 
Upvote 0
Upvote 0
chắc phải kiểm tra lại office rồi, mấy hôm này viết VBA trục trặc dữ quá mới test thử máy bàn thì ok, => nản, chắc phải làm lại máy móc rồi, cảm ơn anh hai lúa nhiều
 
Lần chỉnh sửa cuối:
Upvote 0
Em có câu hỏi sau, mong các thành viên giúp đỡ.
Em có file Tổng hợp, và nhiều file Số tiền các tháng T1, T2, T3....
Cấu trúc các file:
- File Tong Hop gồm trường: Code, Sotien1, VAT1, Sotien2.....
- File số tiền gồm 3 trường: Code, SoTien, VAT
Bình thường e hay copy dữ liệu file T1, T2... vào các sheet của file Tổng hợp
Rồi từ đó dùng phương thức Find để tìm kiếm theo Code của sheet Tổng hợp từ các sheet T1, T2...
Bài toán đặt ra là dữ liệu T1, T2 càng ngày càng nhiều, copy vào file Tổng hợp làm nặng file.
Vậy có cách nào mà Tổng hợp dữ liệu không cần copy các file T1, T2 vào các sheet của file tổng hợp không?
Tổng hợp dữ liệu không cần mở file. Hình như ADO có thể làm được việc này, hoặc bằng phương thức khác, mong các thành viên giúp đỡ!!!
Em xin chân thành cảm ơn!
Với File đã up ở bài #1, giờ em muốn tổng hợp số liệu của Quý 1, là tổng của 3 tháng T1, T2, T3 thì làm thế nào, em có tìm hiều thì code Consolidate có thể làm được việc đó. Em đang phải dùng 3 công thức sumif với điều kiện Mã Code để làm việc này !$@!!
Mong các thành viên giúp đỡ.
 

File đính kèm

Upvote 0
Với File đã up ở bài #1, giờ em muốn tổng hợp số liệu của Quý 1, là tổng của 3 tháng T1, T2, T3 thì làm thế nào, em có tìm hiều thì code Consolidate có thể làm được việc đó. Em đang phải dùng 3 công thức sumif với điều kiện Mã Code để làm việc này !$@!!
Mong các thành viên giúp đỡ.

Bạn nên vận dụng và suy luận từ bài tôi viết ở trên nhé:

Mã:
Sub Main()
    Dim ObjConn As Object, RS As Object, Files, sht
    Dim StrRequest As String, Path As String, i As Integer ', iSht As Integer
    Path = ThisWorkbook.Path
    Files = Array("T1.xlsb", "T2.xlsb", "T3.xlsb")
    'sht = Array("T1", "T2", "T3")
    Set RS = CreateObject("ADODB.Recordset")
    Sheet1.[A2:E10000].ClearContents
    For i = 0 To UBound(Files)
        Set ObjConn = GetExcelConnection(Path & "\" & Files(i), 1)
        StrRequest = ""
        'For iSht = 0 To UBound(sht)
            StrRequest = "SELECT Code,SoTien,VAT FROM [" & Left(Files(i), 2) & "$A1:E10000]"
            RS.Open "SELECT Code, sum(SoTien),Sum(VAT) from (" & StrRequest & " ) group by Code", ObjConn, 3, 1
            Sheet1.[A65536].End(3).Offset(1).CopyFromRecordset RS
            RS.Close
        'Next
        ObjConn.Close
    Next
    Set RS = Nothing
End Sub
 
Upvote 0
Bạn nên vận dụng và suy luận từ bài tôi viết ở trên nhé:

Mã:
Sub Main()
    Dim ObjConn As Object, RS As Object, Files, sht
    Dim StrRequest As String, Path As String, i As Integer ', iSht As Integer
    Path = ThisWorkbook.Path
    Files = Array("T1.xlsb", "T2.xlsb", "T3.xlsb")
    'sht = Array("T1", "T2", "T3")
    Set RS = CreateObject("ADODB.Recordset")
    Sheet1.[A2:E10000].ClearContents
    For i = 0 To UBound(Files)
        Set ObjConn = GetExcelConnection(Path & "\" & Files(i), 1)
        StrRequest = ""
        'For iSht = 0 To UBound(sht)
            StrRequest = "SELECT Code,SoTien,VAT FROM [" & Left(Files(i), 2) & "$A1:E10000]"
            RS.Open "SELECT Code, sum(SoTien),Sum(VAT) from (" & StrRequest & " ) group by Code", ObjConn, 3, 1
            Sheet1.[A65536].End(3).Offset(1).CopyFromRecordset RS
            RS.Close
        'Next
        ObjConn.Close
    Next
    Set RS = Nothing
End Sub
Em cảm ơn a, vì cơ bản còn yếu nên không biết sửa ở đâu ạ.
Em đang muốn tổng hợp vào sheet TongHop thì code thế nào ạ.
 
Upvote 0
Web KT

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

Back
Top Bottom