Copy gộp dữ liệu của các sheet về 1 sheet. (1 người xem)

Liên hệ QC

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

nggiahoang

Thành viên hoạt động
Tham gia
18/5/13
Bài viết
167
Được thích
108
Copy gộp dữ liệu của các sheet
Nhờ các bạn giúp cho code copy gộp dữ liệu của các sheet từ file data sang file copy gop theo hang ngang .

File DATA : các dữ liệu được nhập trên các sheet :1,2,3,4,5,xyx bất kỳ trên các dòng của từng sheet..
File COPY GOP : LẤY DỮ LIỆU của từng sheet dàn theo hàng ngang ; dữ liệu tương ứng từng dòng y như đã nhập liệu bên file DATA.

Trong file này mình có làm bằng tay phần kết quả cần đạt .
 

File đính kèm

Bạn tạo thêm 1 sheet có tên TH trong file Data và định dạng như sheet Copy tay, sau đo chạy sub dưới đây
Trong File bạn đưa thì các sheet từ 1 tới xyz có cấu trúc các dòng hoàn toàn giống nhau nên tạm xài sub này nếu phát sinh sẽ phải thay đổi code
Mã:
Sub TH()
Dim sh As Worksheet, Col As Long
For Each sh In ThisWorkbook.Worksheets
    If sh.Name <> "TH" Then
        Col = Col + 3
        sh.Range("C5:E1000").Copy
        Sheets("TH").Cells(9, Col + 1).PasteSpecial xlPasteValues
    End If
Next
End Sub
 
Upvote 0
Copy gộp dữ liệu của các sheet
Nhờ các bạn giúp cho code copy gộp dữ liệu của các sheet từ file data sang file copy gop theo hang ngang .

File DATA : các dữ liệu được nhập trên các sheet :1,2,3,4,5,xyx bất kỳ trên các dòng của từng sheet..
File COPY GOP : LẤY DỮ LIỆU của từng sheet dàn theo hàng ngang ; dữ liệu tương ứng từng dòng y như đã nhập liệu bên file DATA.

Trong file này mình có làm bằng tay phần kết quả cần đạt .

Góp ý cho bạn:

Không ai gộp các sheet theo chiều ngang hết, vì sẽ khó khăn cho khâu tổng hợp.

Thông thường người ta gộp theo chiều dọc, để tổng hợp người ta sử dụng PivotTable, chỉ cần vài thao tác là được kết quả và muốn tính kiểu gì cũng rất thuận tiện.
 
Upvote 0
Góp ý cho bạn:

Không ai gộp các sheet theo chiều ngang hết, vì sẽ khó khăn cho khâu tổng hợp.

Thông thường người ta gộp theo chiều dọc, để tổng hợp người ta sử dụng PivotTable, chỉ cần vài thao tác là được kết quả và muốn tính kiểu gì cũng rất thuận tiện.


Qua theo dõi nhiều bài của bác em cũng có thấy điều đó ; tuy nhiên cái bảng hàng ngang của trên 1 file khác là em export từ phần mềm mà ra ,nếu nhập tay trên mạng thì lâu lắm( cả ngày ) .Do đó em tuân thủ đúng hàng và cột của bảng biểu để khi lấy dữ liệu từ excel sang và chỉ import là được nguyên dữ liệu tổng (1 phút ).

Vậy em nhờ bác tổng hợp theo hàng dọc trên sheet và sau đó trích xuất ra cái bảng hàng ngang của file "gộp " giúp em .Cám ơn bác!!!
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn tạo thêm 1 sheet có tên TH trong file Data và định dạng như sheet Copy tay, sau đo chạy sub dưới đây
Trong File bạn đưa thì các sheet từ 1 tới xyz có cấu trúc các dòng hoàn toàn giống nhau nên tạm xài sub này nếu phát sinh sẽ phải thay đổi code
Mã:
Sub TH()
Dim sh As Worksheet, Col As Long
For Each sh In ThisWorkbook.Worksheets
    If sh.Name <> "TH" Then
        Col = Col + 3
        sh.Range("C5:E1000").Copy
        Sheets("TH").Cells(9, Col + 1).PasteSpecial xlPasteValues
    End If
Next
End Sub

Cám ơn bạn dhn46 !! mình sẽ test và báo cáo lại với bạn sau nhé ! cấu trúc các mẫu như nhau là do quy định sổ sách của bộ đó bác ,không được phép làm khác.(hichic)
 
Upvote 0
Chào bạn dhn46 !mình đã test code và báo cáo lại kết quả như sau :

Đoạn code trên khi copy vào file “TH” để chạy thì những dữ liệu trên các tháng theo từng dòng đã đúng , tuy nhiên code lại đi lạc địa chỉ của cột , thay vì dán từ cột D trở đi thì em nó dán ngay cột J bạn à .Có thể sửa code sao cho chỉ đích danh nơi đến trên từng cột được không bạn vì trên file thật còn nhiều sheet liên quan chẳng hạn sheet lý lịch hs,sheet 6,7,8,9,10,hk2,thống kê…code cứ nhắm vùng C5:E100 có dữ liệu khác là lấy về sheet TH hết tất cả.
 

File đính kèm

Upvote 0
Chào bạn dhn46 !mình đã test code và báo cáo lại kết quả như sau :

Đoạn code trên khi copy vào file “TH” để chạy thì những dữ liệu trên các tháng theo từng dòng đã đúng , tuy nhiên code lại đi lạc địa chỉ của cột , thay vì dán từ cột D trở đi thì em nó dán ngay cột J bạn à .Có thể sửa code sao cho chỉ đích danh nơi đến trên từng cột được không bạn vì trên file thật còn nhiều sheet liên quan chẳng hạn sheet lý lịch hs,sheet 6,7,8,9,10,hk2,thống kê…code cứ nhắm vùng C5:E100 có dữ liệu khác là lấy về sheet TH hết tất cả.

Có chuyện thêm các sheet tháng 6,7,8,9,10... nữa sao?
Xem file này, chỉ lấy các tháng 1-->5 và hk1 vào sheet TH_HK1.
 

File đính kèm

Upvote 0
Chào bạn dhn46 !mình đã test code và báo cáo lại kết quả như sau :

Đoạn code trên khi copy vào file “TH” để chạy thì những dữ liệu trên các tháng theo từng dòng đã đúng , tuy nhiên code lại đi lạc địa chỉ của cột , thay vì dán từ cột D trở đi thì em nó dán ngay cột J bạn à .Có thể sửa code sao cho chỉ đích danh nơi đến trên từng cột được không bạn vì trên file thật còn nhiều sheet liên quan chẳng hạn sheet lý lịch hs,sheet 6,7,8,9,10,hk2,thống kê…code cứ nhắm vùng C5:E100 có dữ liệu khác là lấy về sheet TH hết tất cả.
Chào bạn,

Việc lệch cột với file dữ liệu mới là dễ hiểu vì bạn đã thêm 2 sheet mới là thongke và lylichhs => do đó nó sẽ lấy dữ liệu từ 2 sheet này.

Vậy để tránh viếc sửa code nhiều lần bạn có thể cung cấp tên tất cả các sheet và cách quy chiếu tên sheet đến vùng dữ liệu TH tương ứng.

Ví dụ: như file của bạn thì sheet "thangn" => copy về vùng "n" trong sheet TH
sheet "hk1" => copy về vùng "hk1"
Còn trường hợp nào nữa bạn liệt kê hết để viết Code 1 lần có thể chính xác và áp dụng được ngay.
 
Upvote 0
Vậy em nhờ bác tổng hợp theo hàng dọc trên sheet và sau đó trích xuất ra cái bảng hàng ngang của file "gộp " giúp em

Bạn thử File Excel 2010:

- Do File bạn là Excel 2003 nên tại B4 sheet Huong dan tôi chọn Version là 2003 (nêu là File lấy dữ liệu là Excel 2010 thì chọn 2010).

- Tại D4 sheet THCacdanhSach, tôi chọn là 1 (nên chỉ có dữ liệu của sheet 1), nếu muốn hiện ra hết dữ liệu thì chọn Select All rồi nhấn nút OK.

Nội dung để thao tác lấy dữ liệu của File DATA, bạn đọc trong sheet Huong dan.
 

File đính kèm

Upvote 0
Bạn dhn46 : trên file đầy đủ thì có các shett T6,7,8,9 ,10,hk2 cũng có cấu trúc cột y chang như hk1 ; lúc mình copy code vào sheet TH và chạy code thì dữ liệu nhảy loạn nên đã xóa các sheet này và xóa dữ liệu trên 2 sheet thống kê va lý lịch hs đi .Chạy code thì ra kết quả như trên.( hk2 thì cũng lấy hàng ngang y như hk1 nhưng chỉ lấy dữ liệu từ T6 trở đi ).Cái này năm nay mới áp dụng vừa xong hk1 , còn hk2 thì chưa tới nên mình chưa cho DL vào .

Cám ơn bạn dhn46 ! đã tận tình giúp đỡ ,mình sẽ gởi file đầy đủ với dữ liệu giả lập lên để bạn giúp cho lần nữa nhé.

Thầy Bate : em đã test thử file của thầy vừa xong và thấy kết quả rất tốt ,lấy đủ dữ liệu theo hàng và cột khớp với tên hs.Nếu làm cho hk2 thì em chỉ đổi tên sheet là xong.Cám ơn thầy nhiều !

Bác Be09 : em chỉ mới mở file xem qua thấy nhiều công phu quá nên chưa kịp hiểu và vận dụng trong trường hợp của mình .Trong thời gian tới (qua tết ) em sẽ gởi file đầy đủ theo ds toàn trường để lọc từng lớp theo từng tháng( 2 điều kiện ) trên 1 mẫu data như trên và kết quả cuối cùng là mẫu ngang theo yêu cầu cấp trên ( làm cho file gọn lại chỉ còn chừng 3,4 sheet ).Cám ơn bác thật nhiều!
 
Upvote 0
Bạn có thể làm theo phương pháp sau cho chủ động.

1/ Khai báo thông số tại sheet INF:

Khai báo tên các sheet vào cột tên sheet tại sheet INF
Khai báo cột copy tương ứng tại sheet TH trong sheet INF

2/ Bấm nút GPE.
 

File đính kèm

Upvote 0
Cám ơn bạn dhn46 thật nhiều ! Kết quả của Thầy Bate và của bạn thì như nhau nhưng nhìn code của bạn thì dể hiểu ,dễ tùy biến hơn.Như vậy thì sau này vận dụng cho hk2 cũng tương tự và chỉ cần xài 1 code trên là ngon lành phải không bạn ?
Sub TH()
Dim cls As Range
Sheets("TH").[D9:AZ1000].ClearContents
For Each cls In Sheets("INF").Range("B2").Resize(Sheets("INF").[B2].End(xlDown).Row - 1)
Sheets(cls.Value).Range("C5:E1000").Copy
Sheets("TH").Range(cls.Offset(, 1)).PasteSpecial xlPasteValues
Next
End Sub

Khai báo thêm trong sheet "INF"....
 

File đính kèm

Upvote 0
Cám ơn bạn dhn46 thật nhiều ! Kết quả của Thầy Bate và của bạn thì như nhau nhưng nhìn code của bạn thì dể hiểu ,dễ tùy biến hơn.Như vậy thì sau này vận dụng cho hk2 cũng tương tự và chỉ cần xài 1 code trên là ngon lành phải không bạn ?
Sub TH()
Dim cls As Range
Sheets("TH").[D9:AZ1000].ClearContents
For Each cls In Sheets("INF").Range("B2").Resize(Sheets("INF").[B2].End(xlDown).Row - 1)
Sheets(cls.Value).Range("C5:E1000").Copy
Sheets("TH").Range(cls.Offset(, 1)).PasteSpecial xlPasteValues
Next
End Sub

Khai báo thêm trong sheet "INF"....

Chào bạn,

Về cách làm thì của thầy giáo Ba tê sẽ nhanh hơn rất nhiều vì đó là sử dụng mảng, nhưng với dữ liệu ít như của bạn (chưa tới 1 triệu records) thì xử lý trên Range cũng không nặng lắm và sẽ dễ dàng tùy biến như bạn đã nói bên trên.

Với người mới tìm hiểu VBA thì xử lý trên Range là dễ tiếp cận và trực quan nhất. Hy vọng bạn sẽ tùy biến và sử dụng phù hợp với công việc của bạn!
 
Upvote 0
Chào bạn,

Về cách làm thì của thầy giáo Ba tê sẽ nhanh hơn rất nhiều vì đó là sử dụng mảng, nhưng với dữ liệu ít như của bạn (chưa tới 1 triệu records) thì xử lý trên Range cũng không nặng lắm và sẽ dễ dàng tùy biến như bạn đã nói bên trên.

Với người mới tìm hiểu VBA thì xử lý trên Range là dễ tiếp cận và trực quan nhất. Hy vọng bạn sẽ tùy biến và sử dụng phù hợp với công việc của bạn!

Hì ! với 1 lớp thì như trên nhưng với nhiều lớp làm gộp chung vào 1 sheet và trích xuất theo cách của bác Be09 thì cũng nặng đáng kể.Tạm gác lại mọi chuyện qua tết tính sau .

Năm mới chúc Thầy Bate,bác Be09 ,anh bạn Dhn46 và gia đình ăn tết vui vẻ và mạnh khỏe !!!
 
Upvote 0
nhưng với nhiều lớp làm gộp chung vào 1 sheet và trích xuất theo cách của bác Be09 thì cũng nặng đáng kể

Khi gộp chung vào sheet Gop_File xong thì xóa các sheet khác đi (1, 2....XYZ), thì lấy gì mà nặng.
 
Upvote 0
Khi gộp chung vào sheet Gop_File xong thì xóa các sheet khác đi (1, 2....XYZ), thì lấy gì mà nặng.

Chủ thớt chỉ có mục đích làm cho đúng yêu cầu công việc (đúng yêu cầu theo lối diễn giải của mình). Bác đề nghị cách thiết kế lại cho chuẩn dữ liệu thì đương nhiên đối với chủ thớt là nặng rồi.

Khi nhìn một chiếc xe hàng có sàn cao, người ta chỉ nghĩ đến việc dễ lội nước ngập. Bác bảo "coi chừng xe sàn cao lúc chứa hàng nặng thì trọng tâm cũng cao, dễ bị lật lúc chạy nhanh hay thắng gấp" người ta không nghe đâu.
 
Upvote 0

Như bài 3 tôi đã nêu:
Góp ý cho bạn:

Không ai gộp các sheet theo chiều ngang hết, vì sẽ khó khăn cho khâu tổng hợp.

Thông thường người ta gộp theo chiều dọc, để tổng hợp người ta sử dụng PivotTable, chỉ cần vài thao tác là được kết quả và muốn tính kiểu gì cũng rất thuận tiện.

Vì vậy, những vấn đề tôi nêu chỉ là góp ý cho chủ thớt.

Việc chủ thớt dùng hay không dùng hoặc sử dụng kiểu gì đó là quyền của chủ thớt, tôi không có ý kiến.
 
Upvote 0
Chủ thớt chỉ có mục đích làm cho đúng yêu cầu công việc (đúng yêu cầu theo lối diễn giải của mình). Bác đề nghị cách thiết kế lại cho chuẩn dữ liệu thì đương nhiên đối với chủ thớt là nặng rồi.

Khi nhìn một chiếc xe hàng có sàn cao, người ta chỉ nghĩ đến việc dễ lội nước ngập. Bác bảo "coi chừng xe sàn cao lúc chứa hàng nặng thì trọng tâm cũng cao, dễ bị lật lúc chạy nhanh hay thắng gấp" người ta không nghe đâu.

Đi xe hơi thì em cũng thích nhưng hổng biết lái xe 4 bánh mà chỉ biết chạy xe wave ;lúc hư máy thì xe hơi nặng lắm .Phải học lái xe và xử lý tình huống trước đã bác à.
 
Upvote 0
Khi gộp chung vào sheet Gop_File xong thì xóa các sheet khác đi (1, 2....XYZ), thì lấy gì mà nặng.

Đây chính là hướng mà em muốn tiến tới để cho file được gọn gàng , trích lọc dễ dàng ,tổng hợp đa dạng .....

Và đây là file gộp các lớp về chung 1 sheet , tại sheet 2 sẽ lọc ra mỗi lớp theo từng tháng , sheet 3 trích xuất ra kết quả của bảng ngang theo từng học kỳ ( bao gồm các tháng ).

Nhờ các thầy, các bác , các bạn vào làm giúp .Cám ơn !
 

File đính kèm

Upvote 0
Đi xe hơi thì em cũng thích nhưng hổng biết lái xe 4 bánh mà chỉ biết chạy xe wave ;lúc hư máy thì xe hơi nặng lắm .Phải học lái xe và xử lý tình huống trước đã bác à.

Tôi đã gặp nhiều trường hợp này trên GPE rồi. Cho nên tôi thừa hiểu là không thể giải thích gì với bạn cả.

Những gì tôi nói có mục đích giống như bạn be09, tức là chỉ dùng để thông tin cho các bạn khác đang theo dõi đề tài.
Ở đây bạn be09 là một trong một số rất ít người cùng lập trường với tôi về cách sử lý vấn đề:
Tìm cách thiết kế lại bảng tính để sử lý công việc thay vì dùng xảo thuật để sử lý thiết kế có sẵn.
 
Upvote 0
Web KT

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

Back
Top Bottom