Tổng hợp dữ liệu từ nhiều sheet thành một sheet

  • Thread starter lexthien
  • Ngày gửi
L

lexthien

Trung cấp
14/10/05
77
1
8
TPHCM
Thân gửi các cao thủ VBA dùng trong Excel
Tôi có 1 ví dụ nho nhỏ nhờ các đại ca ứng dụng VBA giúp.
Tôi có 12 sheet tuong ứng với 12 tháng trong 1 năm
Các sheet có cấu trúc giống nhau như sau:
Ngày CT Số CT Diễn giải TK đối ứng PS Nợ PS Có Dư Nợ Dư Có
Có đoạn code nào cho phép nối các sheet lại hay không ( 12 sheet thành 1 sheet tương ứng tháng 1,tháng 2, .....
Nhờ các đại ca giúp
 
Khóa học Quản trị dòng tiền
M

mysterious_girl

Guest
Anh lexthien ơi anh nói rõ thêm một tí đi ạ. "12 sheet thành 1 sheet tương ứng tháng 1,tháng 2, ....."----> chưa rõ lắm!!!!
 
L

lexthien

Trung cấp
14/10/05
77
1
8
TPHCM
To green_field
Bạn ơi file excel có 12 sheet tương ứng 12 tháng . Mình muốn bạn tạo thêm 1 sheet 13 trong đó sẽ copy dữ liệu tháng 1 đặt trước, kế đó copy dữ liệu sheet 2 vào, tiếp nữa copy dữ liệu sheet3 vào và tiếp cho đến sheet 12
Nhờ bạn giúp
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
Thứ tự CT sẽ như sau:

Ở đây tôi nêu cách chép chỉ 2 tháng:
- Chọn Sheet1 -> Chọn A2 & tìm đến dòng cuối: để XĐ phạm vi chép (cũng tương tự sẽ XĐ được cuối cột) ra lệnh Copy phạm vi này;
- Sang Sheet13 ta lại XĐ dòng cuối & chép cục cưng Sheet1 vô;
Quá trình sẽ lặp lại với Sheet2
Nếu chịu vậy sẽ cụ thể sau;
Tạm biệt!
 
L

lexthien

Trung cấp
14/10/05
77
1
8
TPHCM
To HongViet
Đúng rồi đó bạn ơi
Khởi đầu Sheet 13 là sheet trắng không có dữ liệu sao đó dùng VBA để chép dữ liệu sheet1 vào xong đến dữ liệu sheet 2 tiếp nối dữ liệu sheet 1 đã chép vào sheet 13 và tiếp ...... đến sheet 12
Nhờ bạn giúp
 
Sửa lần cuối:
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,374
36
48
46
Goooogle
Nếu bạn muốn duyệt qua tất cả các sheet trong workbook, đơn giản chỉ làm như sau:
Dim Sh As Worksheet
On Error Resume Next
Application.ScreenUpdating = False
For Each Sh In ActiveWorkbook.Sheets
'Code goes here
Next Sh

Với đoạn code trong vòng lặp, tùy theo cấu trúc của các sheet mà coding. Thí dụ mỗi sheet có dữ liệu bắt đầu từ cột A, dòng 4, Sheet tổng hợp có tên là TH, bạn xem đoạn code củ chuối sau:
If Sh.Name <> "TH" Then
Sh.Activate
Range("A4").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
Sheets("TH").Activate
Range("A60000").Select
Selection.End(xlUp).Select
Selection.Offset(1, 0).Select
ActiveSheet.Paste 'hoặc paste special
Application.CutCopyMode = False​
End If
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
Định copy cho anh Thiện một đoạn code em tự làm lấy cho mình. Nhưng mà nghĩ là thì em phải chỉnh lại đoạn code này nhiều quá.
Vậy cũng chưa xong! Em lại thắc mắc là anh dùng cái này mấy lần. Nếu nhiều lần phải viết cách khác rồi.... Nhiều thứ quá. Thôi thì anh mail cho em, em viết giúp anh cho mau chứ như thế này thì :banana:
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
Anh Adam ơi!
Chúng ta có thể dùng ActiveSheet.UsedRange để xác định vùng dử liệu đang sử dụng.
Range("A60000").Select
Selection.End(xlUp).Select
Selection.Offset(1, 0).Select
Có thể sử lại Range("A"& ActiveSheet.UsedRange.row.count + 1).activate

Ngoài ra nên tránh method select nhiều sẽ lại chậm chương trình vì
 
L

lexthien

Trung cấp
14/10/05
77
1
8
TPHCM
To adam_tran
Em chép đoạn code vào module nhưng không thấy marco để chạy
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
Chưa có sub và end sub mà anh.
Hơn nữa theo lời anh adam thì anh phải chỉnh lại đoạn code đó trước khi sửa dụng nhiều đấy
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
Dear lexthien,
-----------------
Theo mình thì bạn nên đặt các bảng dữ liệu 12 tháng mỗi tháng 1 name. Sau đó dùng vòng lặp từ 1 đến 12 (step 1) để copy các name này vào sheet13.
Tôi chỉ thắc mắc là nếu các trường giống nhau thì sao lexthien phải chia thành 12 vùng khác nhau làm gì để rồi sau đó lại phải gộp lại(?)
Gợi ý: Nói chung là có rất nhiều cách, kể cả không dùng "nêm". Nhưng tôi thấy hay nhất là nếu xác định dòng cuối cùng của một vùng, chúng ta có thể sử dụng thuộc tính Range(<vùng đó>).CurrentRegion.Rows.Count
 
Sửa lần cuối:
L

lexthien

Trung cấp
14/10/05
77
1
8
TPHCM
Trích:
Đào Việt Cường nói:
Dear lexthien,
-----------------
Theo mình thì bạn nên đặt các bảng dữ liệu 12 tháng mỗi tháng 1 name. Sau đó dùng vòng lặp từ 1 đến 12 (step 1) để copy các name này vào sheet13.
Tôi chỉ thắc mắc là nếu các trường giống nhau thì sao lexthien phải chia thành 12 vùng khác nhau làm gì để rồi sau đó lại phải gộp lại(?)
Gợi ý: Nói chung là có rất nhiều cách, kể cả không dùng "nêm". Nhưng tôi thấy hay nhất là nếu xác định dòng cuối cùng của một vùng, chúng ta có thể sử dụng thuộc tính Range(<vùng đó>).CurrentRegion.Rows.Count

Dữ liệu 12 tháng tương ứng với sổ quỹ tiền mặt hoặc sổ cái của 1 tài khoản trong cả năm. Nay mình muốn nối lại.
Bạn Nguyen Binh đả có 1 đoạn code rất đơn giản nhưng rất hay đã thành công rồi, nhưng khi ở các sheet tăng các dòng tiêu đề lên thì khi copy qua sheet 13 lại không được. Mình đang nghiên cứu.
Mong các bạn hỗ trợ giúp tôi
Thân chào all
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
lexthien nói:
Trích:
Dữ liệu 12 tháng tương ứng với sổ quỹ tiền mặt hoặc sổ cái của 1 tài khoản trong cả năm. Nay mình muốn nối lại.
(...)
Mong các bạn hỗ trợ giúp tôi
Vậy thì theo tôi bạn nếu các phát sinh dưới 65.536 dòng thì nên đưa tất cả dữ liệu lên một sheet cho gọn. Làm như vậy tối ưu hơn mà chẳng phải mất công "nọ kia". Việc kiểm soát dữ liệu sẽ tập trung hơn.
Tôi đang làm kế toán giúp một công ty thương mại quảng cáo, dữ liệu cũng tương đối nhưng tôi có thể quản lý cả 5 năm trên một workbook thấy tốc độ xử lý vẫn có thể chấp nhận được. (Tất nhiên, khi mà dữ liệu đã phình to thì đây là cách không được khuyến khích)
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
hunghuongus nói:
tôi cũng cần như vậy bạn Nguyên Bình chép giùm minh 1 files có viết core sẵn để chạy xin cám ơn.
hunghuongus@gmail.com
Đoạn code này của em chỉ là để ứng dụng cho mỗi file của anh Lxthien. Nếu dùng cho các file khác e là nó chạy loạn xạ mất thôi. mong các bác thông cảm đưa ra một đoạn code cho trường hợp chung nhất rất khó.
 
L

luongvanluyen

Guest
2/9/05
27
0
0
HCM CITY
Đào Việt Cường nói:
Vậy thì theo tôi bạn nếu các phát sinh dưới 65.536 dòng thì nên đưa tất cả dữ liệu lên một sheet cho gọn. Làm như vậy tối ưu hơn mà chẳng phải mất công "nọ kia". Việc kiểm soát dữ liệu sẽ tập trung hơn.
Tôi đang làm kế toán giúp một công ty thương mại quảng cáo, dữ liệu cũng tương đối nhưng tôi có thể quản lý cả 5 năm trên một workbook thấy tốc độ xử lý vẫn có thể chấp nhận được. (Tất nhiên, khi mà dữ liệu đã phình to thì đây là cách không được khuyến khích)
Nếu dữ liệu của bạn nhiều, thì có thể bạn dùng ADO đưa qua Access. Sau đó lại dùng ADO để đưa lại. Cách này thì hay hơn nhiều và có thể linh động cho nhiều lọai dữ liệu. Bạn có thể tham khảo đọan code xuất dữ liệu. Bạn tìm kiếm "ADO,VBA" là OK.
LVL
 
Secret_grasses

Secret_grasses

Guest
luongvanluyen nói:
Bạn có thể tham khảo đọan code xuất dữ liệu. Bạn tìm kiếm "ADO,VBA" là OK.
LVL

Em tìm giống anh nhưng chỉ ra kết quả là 1 bài " Nối dử liệu các sheet thành 1 sheet". Nhưng em cũng tìm ra rồi. Đễ đỡ mất công tìm kiếm, em đưa ra cái link ở đây luôn:

-VB SourceCode: ADO + ExcelDB

-Lấy và lọc dữ liệu từ bên ngoài trước khi đưa vào Excel

-Tìm hiểu về ADO (trang web của anh Lê Văn Duyệt)
 
Sửa lần cuối:
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
Dear all,
---------
Mình bổ sung thêm cái này (file đính kèm) để mọi người tham khảo. Cái này mình làm giúp một người quen để chữa cháy thôi, có thể tham khảo để thảo luận gộp các sheet có cùng cấu trúc vào một sheet. Mong mọi người góp ý để cải tiến!
 
Sửa lần cuối:
L

lexthien

Trung cấp
14/10/05
77
1
8
TPHCM
1/ Có đoạn VBA nào chỉ đơn giản là copy và dán dữ liệu vào sheet tổng từ các sheet khác không?
2/ Nếu đơn giản hơn thì cho phép qui định số dòng & số cột của từng sheet 1,2,3... copy & dán vào sheet tổng (dữ liệu chép từ sheet 2 vào sheet tổng phải nối tiếp dữ liệu sheet 1 đã chép vào sheet tổng, không được chép đè)
3/ Nếu áp dụng past link dữ liệu từ sheet 1 vào sheet tổng, rồi tiếp tục cho sheet 2 , 3, ... thì được rồi nhưng thủ công & mỏi tay quá
Có cao thủ nào giúp mình không?
 

Xem nhiều

Webketoan Zalo OA