Giúp em dùng VBA gộp nhiều sheet dữ liệu vào sheet tổng hợp định dạng sẵn

Liên hệ QC

thelight0602

Thành viên mới
Tham gia
17/12/09
Bài viết
6
Được thích
0
Em có file này dự kiến khoảng 15-20 sheet dữ liệu giống nhau cần hợp nhất vào bảng bảng tổng hợp ở ô A5 mà không làm mất định dạng form. Anh chị hướng dẫn giúp em với ạ.
Cái này có tính update nên cần clear toàn bộ dữ liệu ở ô A5 sheet TH trước khi gộp các sheet lại ạ.

Em cảm ơn nhiều
 

File đính kèm

  • MNG_sl_new.xlsm
    109.2 KB · Đọc: 33
Em có file này dự kiến khoảng 15-20 sheet dữ liệu giống nhau cần hợp nhất vào bảng bảng tổng hợp ở ô A5 mà không làm mất định dạng form. Anh chị hướng dẫn giúp em với ạ.
Cái này có tính update nên cần clear toàn bộ dữ liệu ở ô A5 sheet TH trước khi gộp các sheet lại ạ.

Em cảm ơn nhiều
Nếu vẫn còn quan tâm thì dùng thử xem. Code củ chuối thôi mà cũng chạy ra được kết quả đúng ý.(chưa thử lại kỹ)
Hãy thêm dữ liệu của các Sheet và vào Sheet TH2 và nhấn nút GỘP SHEET và kiểm tra kết quả.
 

File đính kèm

  • MNG_sl_new.xlsm
    131 KB · Đọc: 36
Chào bạn, mình không biết lập trình VBA, nhưng hay sưu tầm và vận dụng code VBA trong công việc
Mình có xem video youtube và làm theo được một file như này .
Giờ mình muốn sửa một số điều kiện ( xem sheet CODE), bạn xem sửa giúp mình được không
 

File đính kèm

  • 1.xlsm
    212.5 KB · Đọc: 14
Chào bạn, mình không biết lập trình VBA, nhưng hay sưu tầm và vận dụng code VBA trong công việc
Mình có xem video youtube và làm theo được một file như này .
Giờ mình muốn sửa một số điều kiện ( xem sheet CODE), bạn xem sửa giúp mình được không
Không biết bạn hỏi ai. nhưng đọc qua và tải file đính kèm về nhưng không tài nảo mở được.
Bạn muốn hỏi ai thì trích dẫn người đó và chỉ cần đăng file giả định có khoảng vài trăm dòng, mô tả rố kết quả mong muốn (nếu có thể làm tay một vài dòng, một vài trường hợp).
 
Không biết bạn hỏi ai. nhưng đọc qua và tải file đính kèm về nhưng không tài nảo mở được.
Bạn muốn hỏi ai thì trích dẫn người đó và chỉ cần đăng file giả định có khoảng vài trăm dòng, mô tả rố kết quả mong muốn (nếu có thể làm tay một vài dòng, một vài trường hợp).

Không biết bạn hỏi ai. nhưng đọc qua và tải file đính kèm về nhưng không tài nảo mở được.
Bạn muốn hỏi ai thì trích dẫn người đó và chỉ cần đăng file giả định có khoảng vài trăm dòng, mô tả rố kết quả mong muốn (nếu có thể làm tay một vài dòng, một vài trường hợp).
chào bạn , mình muốn hỏi bạn, mà quên conmet vào câu trả lời của bạn, lại coment vào cả chủ đề, xin lỗi bạn nhé
Mình có làm file giả định rồi, ko biết sao lại ko đọc được, mình có tải lại file về vẫn mở bình thường
bạn xem lại giúp mình file này
 
chào bạn , mình muốn hỏi bạn, mà quên conmet vào câu trả lời của bạn, lại coment vào cả chủ đề, xin lỗi bạn nhé
Mình có làm file giả định rồi, ko biết sao lại ko đọc được, mình có tải lại file về vẫn mở bình thường
bạn xem lại giúp mình file này
Tôi tin là sẽ không có ai muốn giúp bạn bằng cách thiết kế file giúp bạn, bởi vì: họ không biết ý định của bạn là gì, tổng hợp từ cột nào đến cột nào..v.v., và không muốn ngồi gõ lại code của ai đó để sửa lại (vi phạm tác quyền).
Vì vậy bạn xem lại file excel của mình gọt sửa lại đưa lên, sẽ có nhiều người xem, nếu ai quan tâm và giúp được thì họ sẽ giúp ( viết code trên file ấy- gửi trả lại bạn), còn không thì cũng là tài liệu cho ai đó muốn học tập.
Bạn đưa file GoogleSheet nên chỉ để xem thôi, chứ VBA không chạy được.
 
Cảm ơn bạn đã góp ý, nếu bạn không giúp được mình thì thôi vậy
Về việc như bạn nói ở trên, mình xin giải thích thêm như sau: mình xem video trên youtube, gõ lại code, sửa nhiều lần mới chạy được đúng vì cấu trúc file của mình khác với video. Tuy nhiên mình muốn nhờ mọi người sửa giúp một đoạn code để có kết quả tốt hơn
Khi coment , mình cũng đã đính kèm file, trong file đã có code, có ghi rõ một số chỗ cần sửa giúp.
 
Cảm ơn bạn đã xem giúp bài cho mình, mình xin hỏi thêm 1 chút
trong đoạn code :

Sub THDL()
Application.ScreenUpdating = False
Dim wb As Workbook, sn As Worksheet, sd As Worksheet, i As Long, j As Long, k As Long, lrd As Long, lrn As Long

Set wb = ThisWorkbook: Set sd = wb.Sheets("TONGHOP")
If sd.AutoFilterMode = True Then sd.AutoFilterMode = False
lrd = sd.Cells(Rows.Count, 1).End(xlUp).Row: If lrd = 1 Then lrd = 2
sd.Range("A2:H" & lrd).Clear

For i = 1 To Sheets.Count
If Left(Sheets(i).Name, 5) = "Sheet" Then
Set sn = wb.Sheets(i)
lrn = sn.Cells(Rows.Count, 1).End(xlUp).Row
lrd = sd.Cells(Rows.Count, 1).End(xlUp).Row
sn.Range("A1:G" & lrn).Copy sd.Range("A" & lrd + 1)
sd.Range(sd.Cells(lrd + 1, 8), sd.Cells(lrd + lrn, 8)) = Sheets(i).Name
k = k + 1
End If
Next

MsgBox ("So sheets da tong hop la ") & k
Application.ScreenUpdating = True
End Sub


- nếu mình muốn chọn vùng cần tổng hợp rộng hơn ( chèn thêm cột ở sheet thành phần thì
mình sửa code ở đâu, mình có sửa sn.Range("A1:G" & lrn) thành sn.Range("A1:H" & lrn) nhưng không đúng
ví dụ như trong ảnh, các sheet thành phần mình có thêm cột H mô tả thêm một số dữ liệu của sheet
-trong code đang sử dụng điều kiện
For i = 1 To Sheets.Count
If Left(Sheets(i).Name, 5) = "Sheet" Then

ý mình là muốn chỉ định tổng hợp từ sheet thứ mấy đến cuối,
ví dụ như trong ảnh, mình muốn tổng hợp 5 sheet cuối thì chọn điều kiện , thì mình chọn tổng hợp tất cả các sheet bắt đầu từ sheet thứ 4 từ trái qua phải, không quan tâm tên sheet là gì

Bạn sửa thêm giúp mình 2 ý này với nhé
 

File đính kèm

  • Untitled.png
    Untitled.png
    36.8 KB · Đọc: 8
Sub THDL()
Application.ScreenUpdating = False
Dim wb As Workbook, sn As Worksheet, sd As Worksheet, i As Long, j As Long, k As Long, lrd As Long, lrn As Long

Set wb = ThisWorkbook: Set sd = wb.Sheets("TONGHOP")
If sd.AutoFilterMode = True Then sd.AutoFilterMode = False
lrd = sd.Cells(Rows.Count, 1).End(xlUp).Row: If lrd = 1 Then lrd = 2
sd.Range("A2:H" & lrd).Clear

For i = (Tùy chỉnh sheet bắt đầu tại đây) To Sheets.Count
' If Left(Sheets(i).Name, 5) = "Sheet" Then
Set sn = wb.Sheets(i)
lrn = sn.Cells(Rows.Count, 1).End(xlUp).Row
lrd = sd.Cells(Rows.Count, 1).End(xlUp).Row
sn.Range("A1:G" & lrn).Copy sd.Range("A" & lrd + 1)
sd.Range(sd.Cells(lrd + 1, 8), sd.Cells(lrd + lrn, 8)) = Sheets(i).Name
k = k + 1
' End If
Next

MsgBox ("So sheets da tong hop la ") & k
Application.ScreenUpdating = True
End Sub
Ý 2:
Bạn bỏ 2 dòng mầu đỏ, chỉnh thứ tự sheet bắt đầu tại đoạn chữ mầu xanh.
Ví dụ: bắt đầu từ sheet thứ 4 thì đặt:
For i = 4 to sheets.count

Ý 1:
Khá dài dòng nên bạn định thế nào thì gửi file cụ thể để mình viết code rồi bạn so sánh.

(Kỹ năng giải thích của mình rất kém nên thông cảm nhé).
 
Lần chỉnh sửa cuối:
Ý 2:
Bạn bỏ 2 dòng mầu đỏ, chỉnh thứ tự sheet bắt đầu tại đoạn chữ mầu xanh.
Ví dụ: bắt đầu từ sheet thứ 4 thì đặt:
For i = 4 to sheets.count

Ý 1:
Khá dài dòng nên bạn định thế nào thì gửi file cụ thể nên mình viết code rồi bạn so sánh.

(Kỹ năng giải thích của mình rất kém nên thông cảm nhé).
Cảm ơn bạn, để mình thử sửa code như bạn chỉ xem đựic không. Nếu không được mình gửi lại file bạn xem giúp mình nhé
 
Ý 2:
Bạn bỏ 2 dòng mầu đỏ, chỉnh thứ tự sheet bắt đầu tại đoạn chữ mầu xanh.
Ví dụ: bắt đầu từ sheet thứ 4 thì đặt:
For i = 4 to sheets.count

Ý 1:
Khá dài dòng nên bạn định thế nào thì gửi file cụ thể để mình viết code rồi bạn so sánh.

(Kỹ năng giải thích của mình rất kém nên thông cảm nhé).
chào bạn.
"Bạn bỏ 2 dòng mầu đỏ, chỉnh thứ tự sheet bắt đầu tại đoạn chữ mầu xanh." => mình đã sửa như bạn chỉ và đã làm được
ý còn lại như vậy nè :
Vùng dữ liệu chính từ cột A:G, trong mọi trường hợp đều cần số liệu trong vùng này (vùng xanh)
Vùng dữ liệu từ cột H:O, chỉ trong một số trường hợp mới cần tổng hợp dữ liệu ( vùng vàng )
=> lựa chọn linh động vùng cần tổng hợp, giống như điều kiện
For i = 4 to sheets.count để chọn tổng hợp bắt đầu từ sheet nào

thì mình có thể lựa chọn tổng hợp bắt đầu từ cột A đến G, hoặc A đến H, hoặc B đến K,..... và chọn tổng hợp từ dòng 1 đến dòng cuối cùng có dữ liệu
 

File đính kèm

  • Untitled.png
    Untitled.png
    361.3 KB · Đọc: 12
lựa chọn tổng hợp bắt đầu từ cột A đến G, hoặc A đến H, hoặc B đến K,..... và chọn tổng hợp từ dòng 1 đến dòng cuối cùng có dữ liệu
Về mặt lý thuyết là làm được, về mặt thực tế thì mình không đủ thời gian đáp ứng được hết mấy cái "hoặc" rồi cuối cùng còn "ba chấm" nữa bạn ạ.
 
chào bạn.
"Bạn bỏ 2 dòng mầu đỏ, chỉnh thứ tự sheet bắt đầu tại đoạn chữ mầu xanh." => mình đã sửa như bạn chỉ và đã làm được
ý còn lại như vậy nè :
Vùng dữ liệu chính từ cột A:G, trong mọi trường hợp đều cần số liệu trong vùng này (vùng xanh)
Vùng dữ liệu từ cột H:O, chỉ trong một số trường hợp mới cần tổng hợp dữ liệu ( vùng vàng )
=> lựa chọn linh động vùng cần tổng hợp, giống như điều kiện
For i = 4 to sheets.count để chọn tổng hợp bắt đầu từ sheet nào

thì mình có thể lựa chọn tổng hợp bắt đầu từ cột A đến G, hoặc A đến H, hoặc B đến K,..... và chọn tổng hợp từ dòng 1 đến dòng cuối cùng có dữ liệu

Về mặt lý thuyết là làm được, về mặt thực tế thì mình không đủ thời gian đáp ứng được hết mấy cái "hoặc" rồi cuối cùng còn "ba chấm" nữa bạn ạ.
vâng, cảm ơn bạn nhé
còn 1 vấn đề này nữa, bạn sửa nốt giúp mình nhé
file giả lập các sheet cần tổng hợp không có công thức, file thực tế các sheet cần tổng hợp có công thức
kết quả ở sheet tổng hợp giữ nguyên công thức của từng sheet => cần bỏ công thức, chỉ copy value (hoặc tham chiếu dạng ='sheet4'!F17) để chỉ lấy giá trị
 
file giả lập các sheet cần tổng hợp không có công thức, file thực tế các sheet cần tổng hợp có công thức
kết quả ở sheet tổng hợp giữ nguyên công thức của từng sheet => cần bỏ công thức, chỉ copy value (hoặc tham chiếu dạng ='sheet4'!F17) để chỉ lấy giá trị
Khi bạn copy bằng tay sang sheet tổng hợp. Các công thức có bị nhảy hoặc dữ liệu chệch choạc không. nếu đảm bảo được việc copy bằng tay ổn thì VBA cũng sẽ làm được
 
Khi bạn copy bằng tay sang sheet tổng hợp. Các công thức có bị nhảy hoặc dữ liệu chệch choạc không. nếu đảm bảo được việc copy bằng tay ổn thì VBA cũng sẽ làm được
bản chất của sự việc là như này bạn ạ:
Ví dụ dữ liệu cột H của các sheet thành phần cần tổng hợp đang tham chiếu đến các ô nằm ngoài vùng lựa chọn tổng hợp =>
khi chạy code, ở sheet tổng hợp bế nguyên công thức ở sheet thành phần sang dẫn đến giá trị của nó bằng 0 vì nó tham chiếu đến vùng không có giá trị
Bạn xem giúp mình với
Bài đã được tự động gộp:

Bạn thêm đoạn này vào dưới dòng có chữ next nhé.

Mã:
 sd.Range("A2:G" & lrd).Copy
 sd.Range("A2").PasteSpecial xlPasteValues
 sd.Range("A1").Select
Được rồi bạn nhé
Cảm ơn bạn nhiều !
 
bản chất của sự việc là như này bạn ạ:
Ví dụ dữ liệu cột H của các sheet thành phần cần tổng hợp đang tham chiếu đến các ô nằm ngoài vùng lựa chọn tổng hợp =>
khi chạy code, ở sheet tổng hợp bế nguyên công thức ở sheet thành phần sang dẫn đến giá trị của nó bằng 0 vì nó tham chiếu đến vùng không có giá trị
Bạn xem giúp mình với
Trời ạ, không đưa hết ra từ đầu nên bây giờ đi tha hồ đi sửa, mà không biết đã hết hẳn chưa hay một chốc lại phát sinh hả bạn.
 
Vấn đề của mình đã được mọi người giúp đỡ và đã được giải quyết. Mình cảm ơn mọi người nhiều.
Bài đã được tự động gộp:

Trời ạ, không đưa hết ra từ đầu nên bây giờ đi tha hồ đi sửa, mà không biết đã hết hẳn chưa hay một chốc lại phát sinh hả bạn.
Hết rồi bạn ạ. vì file giả định mình gõ lại code theo người ta và thấy đã chạy được, vì các sheet không có công thức nên nó tổng hợp ra kq đúng.
Còn mỗi một vấn đề là cần lựa chọn linh động vùng dữ liệu cần tổng hợp ( chèn thêm cột ở các sheet thành phần ), nhưng chắc là dữ kiện như vậy cần nhiều thời gian. mà vấn đề của mình chỉ cần code như bạn viết giúp cũng đã làm được.
Cảm ơn bạn đã bỏ thời gian giúp mình
 
Lần chỉnh sửa cuối:
Trời ạ, không đưa hết ra từ đầu nên bây giờ đi tha hồ đi sửa, mà không biết đã hết hẳn chưa hay một chốc lại phát sinh hả bạn.
Từ đầu có ai biết con chó ra sao đâu.
Tậu một cún về ngày đầu thì thấy nó đúng nhu cầu cần dọn dẹp ô uế con nít.
Ngày hôm sau mới biết chính mình phải dọn ô uế của nó.
Tuần lễ sau thì biết cần phải tắm rửa. Cả tháng thì bết phải bắt bọ chét...

Nếu biết từ đầu thì lên mâm cho rồi.
 
Web KT

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

Back
Top Bottom