Code VBA tổng hợp dữ liệu nhiều sheet vào 1 sheet

Liên hệ QC

hungvinhhao

Thành viên mới
Tham gia
19/1/08
Bài viết
28
Được thích
1
Em có 1 file báo cáo như file đính kèm. Mỗi mỗi ngày tương ứng với 1 sheet. Các sheet có cấu trúc giống nhau. Sheet "TONGHOP" là tổng hợp dữ liệu của các sheet để báo cáo tháng. Em không biết về VBA lắm mà tổng hợp thủ công thì file chạy chậm. Em nhờ các tiền bối giúp em viết code VBA để:
1 - Hàng Ngày em vào dữ liệu ở các sheet (Sheet 1 .......sheet 31) thì dữ liệu tự cập nhật vào sheet " TONGHOP". Vùng dữ liệu i3:U5000 là tổng Sum (sheet1:sheet 31). với điều kiện đúng mã cửa hàng và mặt hàng.
2 - Khi chèn thêm cột, hoặc dòng ở bất kỳ sheet nào (sheet1,....sheet31) thì ở Sheet "TONGHOP" cũng tự động được chèn thêm đúng như nội dung được thêm vào ở sheet đó và dữ liệu cũng được cập nhật như bước 1.
Rất mong các bậc tiền bối giúp đỡ. Em cảm ơn nhiều.
Ghi chú: Em cũng đã làm theo theo cách dùng code copy dữ liệu các sheet thành 1 sheet nhưng nó lại copy luôn dư liệu của cả sheet "TONGHOP". Mà hơn nữa khi dùng hàm SUMIF tại sheet TONGHOP để cập nhật dữ liệu thì file chạy rất chậm.
Nếu không viết được code theo yêu cầu ở trên thì các tiền bối cho em xin code để mình copy dữ liệu từ sheet 1 đến sheet 31 sang 1 sheet mới. Không copy dữ liệu của sheet TONGHOP. Và code VBA để tổng hợp dữ liệu từ Sheet mới sang Sheet TONGHOP để em không phải dùng hàm SUMIF. Hàm SUMIF chạy rất chậm. Em dùng excel 2003.
 

File đính kèm

  • TONGHOP.rar
    13.5 KB · Đọc: 474
chẳng nhẻ không có cách nào vừa lấy dữ liệu vừa limk được ư.nhờ mọi người giúp với nhé.
Không hiểu ý bạn là như thế nào, mình thấy nếu bạn muốn khi sủa dữ liệu ở sheet khác và quay trở lại sheet tổng hợp thì dữ liệu sẽ đc tổng hợp thì bạn đặt code trong sự kiện worksheet_active nhé.
 
Upvote 0
chẳng nhẻ không có cách nào vừa lấy dữ liệu vừa limk được ư.nhờ mọi người giúp với nhé.
chạy tự động vẫn làm được, nhưng có hạn chế của nó
- mỗi lần bạn nhập liệu code tự chạy, nếu dữ liệu nhiều sẽ cà giựt ... giựt rất khó chịu
- bạn nhập dữ liệu mỗi sheet một ít không đầy đủ rồi lại nhảy qua sheet khác nhập tiếp, tổng hợp có thể không đúng
- Cách đánh số thứ tự của bạn rất dể nhầm lẫn
- có thể mỗi sheet bạn phải tạo một code chạy tự động
mình nghĩ nhập liệu đầy đủ rồi chạy 1 lần cho gọn
 
Upvote 0
vậy thì thôi để vậy rồi cứ làm xong lại chạy tổng hợp không chậm thì cũng rất giở vì lần trước em cũng có một macro link nhung chậm lắm.
 
Upvote 0
Mấy Bác giúp em với
VD: em có 2 file file1 và file2 như mẫu,em muốn copy mỗi cột trong file 1 vào cột tương ứng với từng sheet trong file 2 thì code sao ạ?.em cảm ơn.
 

File đính kèm

  • File1.xlsx
    8.7 KB · Đọc: 21
  • File2.xlsx
    37.4 KB · Đọc: 21
Upvote 0
Mấy Bác giúp em với
VD: em có 2 file file1 và file2 như mẫu,em muốn copy mỗi cột trong file 1 vào cột tương ứng với từng sheet trong file 2 thì code sao ạ?.em cảm ơn.

Chạy thử code này xem sao.
PHP:
Public Sub GPE()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim Ws As Worksheet, Cll As Range, dArr(), K As Long, Col As Long
Dim MyWb As String, Pat As String, FName As String
FName = "File2.xlsx"
MyWb = ThisWorkbook.Name
Pat = ThisWorkbook.Path & "\"
    Workbooks.Open Filename:=Pat & FName
    With ActiveWorkbook
        ReDim dArr(1 To 11, 1 To .Worksheets.Count)
            For Each Ws In .Worksheets
                Col = Col + 1
                K = 1: dArr(K, Col) = Ws.Name
                For Each Cll In Ws.Range("C12:C21")
                    K = K + 1
                    dArr(K, Col) = Cll.Value
                Next Cll
            Next Ws
        .Close False
    End With
Workbooks(MyWb).Activate
Sheet1.Range("B2").Resize(11, Col) = dArr
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Chạy thử code này xem sao.
PHP:
Public Sub GPE()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim Ws As Worksheet, Cll As Range, dArr(), K As Long, Col As Long
Dim MyWb As String, Pat As String, FName As String
FName = "File2.xlsx"
MyWb = ThisWorkbook.Name
Pat = ThisWorkbook.Path & "\"
    Workbooks.Open Filename:=Pat & FName
    With ActiveWorkbook
        ReDim dArr(1 To 11, 1 To .Worksheets.Count)
            For Each Ws In .Worksheets
                Col = Col + 1
                K = 1: dArr(K, Col) = Ws.Name
                For Each Cll In Ws.Range("C12:C21")
                    K = K + 1
                    dArr(K, Col) = Cll.Value
                Next Cll
            Next Ws
        .Close False
    End With
Workbooks(MyWb).Activate
Sheet1.Range("B2").Resize(11, Col) = dArr
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Mình copy dữ lieu vào file 1 và chạy thử thì báo lỗi thế này là như thế nào vậy bạn?mình mù tịt cái khoản này.bạn xem giúp,cảm ơn bạn nhiều
 

File đính kèm

  • Capture.jpg
    Capture.jpg
    41 KB · Đọc: 75
Lần chỉnh sửa cuối:
Upvote 0
Mình copy dữ lieu vào file 1 và chạy thử thì báo lỗi thế này là như thế nào vậy bạn?cảm ơn bạn nhiều
2 file phải cùng Folder. Tên file cũng phải như tên file bạn gởi.
Bạn phải đưa 2 file của bạn lên, chạy code thử mới biết sai do đâu.
Nhìn hình sao biết lỗi từ đâu.
 

File đính kèm

  • File12.rar
    39.2 KB · Đọc: 28
Lần chỉnh sửa cuối:
Upvote 0
2 file phải cùng Folder. Tên file cũng phải như tên file bạn gởi.
Bạn phải đưa 2 file của bạn lên, chạy code thử mới biết sai do đâu.
Nhìn hình sao biết lỗi từ đâu.

2 file của mình đây bạn.vì mình làm báo cáo theo ngày.mỗi ngày là 1 file2,nhưng nhiều lắm,copy dán thì lâu quá
 

File đính kèm

  • File1.xlsx
    8.9 KB · Đọc: 14
  • File2.xlsx
    37.4 KB · Đọc: 15
Upvote 0
2 file phải cùng Folder. Tên file cũng phải như tên file bạn gởi.
Bạn phải đưa 2 file của bạn lên, chạy code thử mới biết sai do đâu.
Nhìn hình sao biết lỗi từ đâu.
Cảm ơn bác,cái này chạy ok.nhưng bị ngược với yêu cầu em đưa ra.code này nó copy các sheets trong file co tên File2 vào các cột của bang trong File1,mình cần copy ngược lại bác ơi.hihi cảm ơn bác nhờ bác xem sửa lại giúp mình với nhé.
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ các anh chị giúp em tạo một code vba làm sao em có thể tự động lấy dữ liệu từ các sheet sang sheet tổng hợp, đống thời nếu dữ liệu của nhưng sheet kia thay đổi thì nó sẽ tự động thay đổi dự liệu ở sheet tổng hợp. em có gửi file đính kèm. nhờ các anh chị giúp đỡ, em cảm ơn nhiều.​
paperclip.png
Tập tin đính kèm
  • xls.gif
    gui giai phap excel.xls (96.5 KB, 3 lần tải)
  • nhờ cả nhà làm giúp em cái code tự động copy mà có link với. chứ copy mà không link thì không chuẩn.
 
Upvote 0
Cảm ơn bác,cái này chạy ok.nhưng bị ngược với yêu cầu em đưa ra.code này nó copy các sheets trong file có tên File2 vào các cột của bảng trong File1,mình cần copy ngược lại bác ơi.hihi cảm ơn bác nhờ bác xem sửa lại giúp mình với nhé.

Vậy thì chạy Sub này từ File1 (phải có đuôi .xlsm hoặc .xlsb), File2.xlsx phải cùng Folder với File1
PHP:
Public Sub GPE()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
    Dim Ws As Worksheet, sArr(), dArr(), I As Long, J As Long
    sArr = Sheet1.Range("B2:I12").Value
    Workbooks.Open Filename:=ThisWorkbook.Path & "\" & "File2.xlsx"   '<----
    With ActiveWorkbook
        For Each Ws In .Worksheets
            ReDim dArr(1 To 10, 1 To 1)
            For J = 1 To UBound(sArr, 2)
                If sArr(1, J) = Ws.Name Then
                    For I = 2 To UBound(sArr)
                        dArr(I - 1, 1) = sArr(I, J)
                    Next I
                    Ws.Range("C12:C21") = dArr
                    Exit For
                End If
            Next J
        Next Ws
        .Save
    End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • File1.xlsm
    19.6 KB · Đọc: 71
Lần chỉnh sửa cuối:
Upvote 0
Chào mọi người,
Mình đang có một việc muốn nhờ mọi người giúp đỡ. Hiện mình đang có các báo cáo của cơ sở (khoảng 20 báo cáo), mỗi báo cáo có khoảng 29 bảng khác nhau. Mình muốn nhờ một bạn tư vấn giúp mình cách viết code VBA để có thể tổng hợp báo cáo tự động.
Mình rất muốn được học VBA nên nếu trong quá trình làm các bạn cho mình tham gia cùng thì tốt quá. Mình xin gửi các bạn 1 chút kinh phí để cảm ơn, Các bạn nào quan tâm xin liên hệ với mình qua email phuonghsph@gmail.com hoặc số điện thoại 0985909660

Thank you so much

Phương
 
Upvote 0
Mình đang có một việc muốn nhờ mọi người giúp đỡ. Hiện mình đang có các báo cáo của cơ sở (khoảng 20 báo cáo), mỗi báo cáo có khoảng 29 bảng khác nhau. Mình muốn nhờ một bạn tư vấn giúp mình cách viết code VBA để có thể tổng hợp báo cáo tự động.
Mình rất muốn được học VBA nên nếu trong quá trình làm các bạn cho mình tham gia cùng thì tốt quá. Mình xin gửi các bạn 1 chút kinh phí để cảm ơn, Các bạn nào quan tâm xin liên hệ với mình qua email phuonghsph@gmail.com hoặc số điện thoại 0985909660
Thứ nhất, bạn không được chen ngang vào chủ đề của người khác.
Thứ hai, việc để lại email/ số điện thoại ở những bài cần trợ giúp là không nên.
Thứ ba, với yêu cầu này, bạn vào chuyên mục "Thành viên giúp nhau" lập chủ đề rồi đề xuất yêu cầu.
 
Upvote 0
Nhờ các anh chị giúp mình viết một đoạn code VBA để tra cứu dữ liệu lập kế hoạch của một mã số chi tiết từ ngày 01 đến ngày 31 trong một tháng. VD: mình cần tra mã chi tiết 221PRI-CL-B-8000 với các thong tin như Sheet "Tra cứu CT".
Tương tự đối với Sheet "Tra cứu Máy".
Rất mong mọi người giúp em với.
 

File đính kèm

  • KHSX-XCK-MÁY - Copy.xls
    2.9 MB · Đọc: 17
Upvote 1
Web KT
Back
Top Bottom