Tổng hợp dữ liệu từ nhiều file khác nhau (1 người xem)

Liên hệ QC

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

phuocrobe

Thành viên hoạt động
Tham gia
2/11/16
Bài viết
131
Được thích
0
Hiện mình có 1 file TongHop.xls dùng để tổng hợp dữ liệu từ B15:S45 sheet M06 của các file1.xls, file2.xls, file3.xls ..... (và nhiều file khác nữa nhưng ở đây chỉ dùng 3 file mẫu này) sang vùng B15:S1000 sheet M06 file TongHop.xls

Khi tổng hợp dữ liệu từ các file khác vào file TongHop.xls thì xuất hiện rất nhiều dòng trống không có dữ liệu do dữ liệu được lấy từ các vùng cố định B15:S45 sheet M06 của các file con.

Vì vậy mình muốn hỏi làm thế nào để lấy dữ liệu của các dòng khi kiểm tra điều kiện C15:C45 sheet M06 của các file con >0 thì sẽ lấy dữ liệu của các dòng đó. Và dữ liệu từ các file con sẽ được hiển thị liên tiếp nhau theo các dòng để tránh bớt hiển thị những dòng trống để tiện theo dõi và quản lý.

Nhờ các anh chị giúp đỡ, em xin chân thành cám ơn rất nhiều !!
 

File đính kèm

Hiện mình có 1 file TongHop.xls dùng để tổng hợp dữ liệu từ B15:S45 sheet M06 của các file1.xls, file2.xls, file3.xls ..... (và nhiều file khác nữa nhưng ở đây chỉ dùng 3 file mẫu này) sang vùng B15:S1000 sheet M06 file TongHop.xls

Khi tổng hợp dữ liệu từ các file khác vào file TongHop.xls thì xuất hiện rất nhiều dòng trống không có dữ liệu do dữ liệu được lấy từ các vùng cố định B15:S45 sheet M06 của các file con.

Vì vậy mình muốn hỏi làm thế nào để lấy dữ liệu của các dòng khi kiểm tra điều kiện C15:C45 sheet M06 của các file con >0 thì sẽ lấy dữ liệu của các dòng đó. Và dữ liệu từ các file con sẽ được hiển thị liên tiếp nhau theo các dòng để tránh bớt hiển thị những dòng trống để tiện theo dõi và quản lý.

Nhờ các anh chị giúp đỡ, em xin chân thành cám ơn rất nhiều !!
Tôi nhớ không nhầm thì Code bài này do bác Ba tê làm giúp bạn. Vì vậy bạn có thể liên lạc với bác ấy để sửa Code.
Về phía tôi, tôi nghĩ sau khi bạn chạy "Public Sub GPE" bạn chạy thêm Code sau:
PHP:
Sub abc()
 Application.ScreenUpdating = False 
   Sheets("M06").Range("A16:S1000").SpecialCells(4).Delete Shift:=xlUp
 Application.ScreenUpdating = True
End Sub
 
Upvote 0
Đúng là code này do bác ba tê giúp mình nhưng mình có hỏi mà mấy hôm nay chắc do bác ấy bận nên k thấy trả lời, và mình đang cần nên fai mở topic mới à. thank bác nhiều nha, để mình thử xem .
Tôi nhớ không nhầm thì Code bài này do bác Ba tê làm giúp bạn. Vì vậy bạn có thể liên lạc với bác ấy để sửa Code.
Về phía tôi, tôi nghĩ sau khi bạn chạy "Public Sub GPE" bạn chạy thêm Code sau:
PHP:
Sub abc()
 Application.ScreenUpdating = False 
   Sheets("M06").Range("A16:S1000").SpecialCells(4).Delete Shift:=xlUp
 Application.ScreenUpdating = True
End Sub
 
Upvote 0
Cho mình hỏi làm thế nào để có thể lồng 2 code này vào thành 1 được không vậy bạn ?

Tôi nhớ không nhầm thì Code bài này do bác Ba tê làm giúp bạn. Vì vậy bạn có thể liên lạc với bác ấy để sửa Code.
Về phía tôi, tôi nghĩ sau khi bạn chạy "Public Sub GPE" bạn chạy thêm Code sau:
PHP:
Sub abc()
 Application.ScreenUpdating = False 
   Sheets("M06").Range("A16:S1000").SpecialCells(4).Delete Shift:=xlUp
 Application.ScreenUpdating = True
End Sub
 
Upvote 0
Cho mình hỏi làm thế nào để có thể lồng 2 code này vào thành 1 được không vậy bạn ?

Bạn thay Sub cũ trong file TongHop thành cái này thử xem.
PHP:
Public Sub GPE()
Application.ScreenUpdating = False
Dim sArr(), Arr1(1 To 16, 1 To 12), Arr2(1 To 26, 1 To 1), Arr3(1 To 1000, 1 To 19), tArr()
Dim MyName As String, Pat As String, I As Long, J As Long, K As Long, N As Long
With ActiveWorkbook
    MyName = .Name
    Pat = .Path & "\"
    tArr = .Sheets("HUONGDAN").Range("B4", .Sheets("HUONGDAN").Range("B65536").End(xlUp)).Value
End With
For N = 2 To UBound(tArr)
    Workbooks.Open Filename:=Pat & tArr(N, 1)
    With ActiveWorkbook
            sArr = .Sheets("M01").Range("C11:N26").Value
        For I = 1 To 16
            For J = 1 To 12
                Arr1(I, J) = Arr1(I, J) + sArr(I, J)
            Next J
        Next I
            sArr = .Sheets("M01.1").Range("C4:C29").Value
        For I = 1 To 26
            Arr2(I, 1) = Arr2(I, 1) + sArr(I, 1)
        Next I
            sArr = .Sheets("M06").Range("A15", .Sheets("M06").Range("B15").End(xlDown)).Resize(, 19).Value
        For I = 1 To UBound(sArr)
            K = K + 1
            For J = 1 To 19
                Arr3(K, J) = sArr(I, J)
            Next J
        Next I
    End With
    ActiveWindow.Close False
Next N
    Workbooks(MyName).Activate
    Sheets("M01").Range("C11:N26") = Arr1
    Sheets("M01.1").Range("C4:C29") = Arr2
    With Sheets("M06")
        .Range("A15").Resize(1000, 19).ClearContents
        .Range("A15").Resize(1000, 19).Font.Bold = False
        .Range("A15:S15").Resize(K) = Arr3
        For I = 1 To K
            If Arr3(I, 1) = Empty Then .Range("A" & I + 14).Resize(, 19).Font.Bold = True
        Next I
    End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bác thật là vi diệu )(&&@@ Cho mình hỏi 1 cái nữa là sau khi cập nhật dữ liệu vào file TongHop.xls thì những dòng từ 1000 trở lên còn rất nhiều dòng trống, liệu mình có thể xóa luôn các dòng trống (xóa dòng trống chứ không phải là xóa dữ liệu tại các dòng đó) từ dòng 1000 trở lên luôn được không.

Vì trong file gốc của mình từ dòng 1000 trở xuống 1001, 1002 .... vẫn còn nhiều dòng dữ liệu để khai báo thông tin và mình còn rất nhiều sheet phải tổng hợp tương tự như thế này để in ra nên mình muốn sau khi cập nhật dữ liệu từ các file khác vào thì từ dòng cuối cùng có dữ liệu nằm trong vùng A16:S1000 của file TongHop sẽ hiển thị tiếp theo nội dung của các dòng từ 1000 trở xuống được không vậy ? (nghĩa là sẽ xóa các dòng trống trong vùng A16:S1000 sau khi tổng hợp)

Xin cám ơn bác nhiều }}}}}
Bạn thay Sub cũ trong file TongHop thành cái này thử xem.
PHP:
Public Sub GPE()
Application.ScreenUpdating = False
Dim sArr(), Arr1(1 To 16, 1 To 12), Arr2(1 To 26, 1 To 1), Arr3(1 To 1000, 1 To 19), tArr()
Dim MyName As String, Pat As String, I As Long, J As Long, K As Long, N As Long
With ActiveWorkbook
    MyName = .Name
    Pat = .Path & "\"
    tArr = .Sheets("HUONGDAN").Range("B4", .Sheets("HUONGDAN").Range("B65536").End(xlUp)).Value
End With
For N = 2 To UBound(tArr)
    Workbooks.Open Filename:=Pat & tArr(N, 1)
    With ActiveWorkbook
            sArr = .Sheets("M01").Range("C11:N26").Value
        For I = 1 To 16
            For J = 1 To 12
                Arr1(I, J) = Arr1(I, J) + sArr(I, J)
            Next J
        Next I
            sArr = .Sheets("M01.1").Range("C4:C29").Value
        For I = 1 To 26
            Arr2(I, 1) = Arr2(I, 1) + sArr(I, 1)
        Next I
            sArr = .Sheets("M06").Range("A15", .Sheets("M06").Range("B15").End(xlDown)).Resize(, 19).Value
        For I = 1 To UBound(sArr)
            K = K + 1
            For J = 1 To 19
                Arr3(K, J) = sArr(I, J)
            Next J
        Next I
    End With
    ActiveWindow.Close False
Next N
    Workbooks(MyName).Activate
    Sheets("M01").Range("C11:N26") = Arr1
    Sheets("M01.1").Range("C4:C29") = Arr2
    With Sheets("M06")
        .Range("A15").Resize(1000, 19).ClearContents
        .Range("A15").Resize(1000, 19).Font.Bold = False
        .Range("A15:S15").Resize(K) = Arr3
        For I = 1 To K
            If Arr3(I, 1) = Empty Then .Range("A" & I + 14).Resize(, 19).Font.Bold = True
        Next I
    End With
End Sub
 
Upvote 0
Bác thật là vi diệu )(&&@@ Cho mình hỏi 1 cái nữa là sau khi cập nhật dữ liệu vào file TongHop.xls thì những dòng từ 1000 trở lên còn rất nhiều dòng trống, liệu mình có thể xóa luôn các dòng trống (xóa dòng trống chứ không phải là xóa dữ liệu tại các dòng đó) từ dòng 1000 trở lên luôn được không.

Vì trong file gốc của mình từ dòng 1000 trở xuống 1001, 1002 .... vẫn còn nhiều dòng dữ liệu để khai báo thông tin
và mình còn rất nhiều sheet phải tổng hợp tương tự như thế này để in ra nên mình muốn sau khi cập nhật dữ liệu từ các file khác vào thì từ dòng cuối cùng có dữ liệu nằm trong vùng A16:S1000 của file TongHop sẽ hiển thị tiếp theo nội dung của các dòng từ 1000 trở xuống được không vậy ? (nghĩa là sẽ xóa các dòng trống trong vùng A16:S1000 sau khi tổng hợp)

Xin cám ơn bác nhiều }}}}}

Xóa từ dòng 1000 trở lên, rồi từ dòng 1001, 1002.... hết hiểu.
Nếu từ dòng 15:1000 không có dữ liệu thì ẩn đi được không?
Thay từ dòng này trở xuống thành như vầy:
PHP:
     With Sheets("M06")  '<-----------Từ dòng này' 
        .Rows("15:1000").Hidden = False
        .Range("A15").Resize(1000, 19).ClearContents
        .Range("A15").Resize(1000, 19).Font.Bold = False
        .Range("A15:S15").Resize(K) = Arr3
        For I = 1 To K
            If Arr3(I, 1) = Empty Then .Range("A" & I + 14).Resize(, 19).Font.Bold = True
        Next I
        .Rows(15 + K & ":1000").Hidden = True
    End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Không phải là ẩn dòng mà là xóa luôn những dòng trống không có dữ liệu từ A15:S1000 sau khi tổng hợp ở file TongHop à.

Vì ở file TongHop từ dòng 1000 trở xuống (là những dòng 1001 , 1002 , 1003 .... ) vẫn còn dữ liệu ở các dòng này, nên mình muốn dữ liệu ở các dòng này sẽ được hiển thị sát phía dưới của dòng có dữ liệu cuối cùng (trong ví dụ này là ở dòng 43 sheet M06 của file TongHop) trong vùng A15:S1000 sau khi tổng hợp ở file TongHop à.

Xóa từ dòng 1000 trở lên, rồi từ dòng 1001, 1002.... hết hiểu.
Nếu từ dòng 15:1000 không có dữ liệu thì ẩn đi được không?
Thay từ dòng này trở xuống thành như vầy:
PHP:
     With Sheets("M06")  '<-----------Từ dòng này' 
        .Rows("15:1000").Hidden = False
        .Range("A15").Resize(1000, 19).ClearContents
        .Range("A15").Resize(1000, 19).Font.Bold = False
        .Range("A15:S15").Resize(K) = Arr3
        For I = 1 To K
            If Arr3(I, 1) = Empty Then .Range("A" & I + 14).Resize(, 19).Font.Bold = True
        Next I
        .Rows(15 + K & ":1000").Hidden = True
    End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn tự nghĩ đi. Lần 1 bấm nút xóa dòng 44-1000. lúc này dòng 1001 thành dòng 44. Nếu bấm lần nữa dòng nào thành dòng nào.
 
Upvote 0
Web KT

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

Back
Top Bottom