Lấy dữ liệu từ các file con đưa vào file tổng. (1 người xem)

  • Thread starter Thread starter bth8320
  • Ngày gửi Ngày gửi
Liên hệ QC

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

bth8320

Thành viên mới
Tham gia
24/11/07
Bài viết
44
Được thích
6
Nghề nghiệp
Kỹ sư tư vấn giám sát
Chào cả nhà,

Mình gặp vấn đề này cần sự giúp đỡ.

Mình muốn tổng hợp dữ liệu từ các file NT1,NT2,NT3 vào file TONG HOP.
Trong đó file tổng hợp có thể chứa các dữ liệu của file con dạng đầy đủ, dạng còn thiếu thông tin và chưa có dữ liệu như file con.
Các file con có thể chứa tất cả các sheet giống file tổng hợp(Do dung lượng upload hạn chế nên mình đã xóa các sheet này đi chỉ để lại 1 sheet).

Nhờ cả nhà giúp về code vba để hiện ra 1 bảng chọn các file con và chuyển các dữ liệu vào file tổng hợp trong đó:
- Nếu ở file tổng và file con giống nhau thì bỏ qua.
- Nếu thiếu thông tin ở ô nào đó thì điền thêm vào trong đúng sheet từ file con(Ví dụ U51 từ file con sẽ vào đúng U51 của file tổng).
- Nếu thiếu toàn bộ thông tin trên dòng thì sẽ copy toàn bộ dòng này vào file tổng hợp.

Nhờ các anh chị em trong diễn đàn xem giúp mình với.
Chi tiết xin xem file đính kèm.

Trân trọng.
 

File đính kèm

Chào cả nhà,

Mình gặp vấn đề này cần sự giúp đỡ.

Mình muốn tổng hợp dữ liệu từ các file NT1,NT2,NT3 vào file TONG HOP.
Trong đó file tổng hợp có thể chứa các dữ liệu của file con dạng đầy đủ, dạng còn thiếu thông tin và chưa có dữ liệu như file con.
Các file con có thể chứa tất cả các sheet giống file tổng hợp(Do dung lượng upload hạn chế nên mình đã xóa các sheet này đi chỉ để lại 1 sheet).

Nhờ cả nhà giúp về code vba để hiện ra 1 bảng chọn các file con và chuyển các dữ liệu vào file tổng hợp trong đó:
- Nếu ở file tổng và file con giống nhau thì bỏ qua.
- Nếu thiếu thông tin ở ô nào đó thì điền thêm vào trong đúng sheet từ file con(Ví dụ U51 từ file con sẽ vào đúng U51 của file tổng).
- Nếu thiếu toàn bộ thông tin trên dòng thì sẽ copy toàn bộ dòng này vào file tổng hợp.

Nhờ các anh chị em trong diễn đàn xem giúp mình với.
Chi tiết xin xem file đính kèm.

Trân trọng.
Với yêu cầu của bạn thì mình xóa hết dữ liệu file tổng hợp đi rùi tổng hợp lại từ các files con, chứ kiểm tra thiếu chỗ nào mà cập nhất thì vất vả quá.
 
Upvote 0
Vì dữ liệu từ các file con được cập nhật liên tục nên việc xóa đi và làm lại rất mất thời gian.
 
Upvote 0
File đưa lên và giải thích chưa rõ ràng

1. Trong file tổng làm gì có Sheet U51???
2. Thông thin giống nhau là giống cái gì ? ô nào có là sao? (cột, dòng, vùng dữ liệu...,vv & vv...)

Giải thích phải rõ ràng và sát thực tế...

Vì dung lượng upload file của mình hơi nhỏ nên mình đã xóa bớt một số sheet. Tổng quan thì các file này có cùng tổng số sheet, cùng tên sheet.
Về ý tưởng thì như sau:
- So sánh các sheet cùng tên nhau trên file tổng và file con.
- Với những dòng dữ liệu mà cả 2 sheet của 2 file giống nhau có thể là số thứ tự cũng được(Mình sẽ tùy biến cho phù hợp với thực tế) thì kiểm tra xem trên file con có giá trị nào khác file tổng không, nếu có thì đưa giá trị này vào.
- Với những dòng mà sheet của file con có mà sheet file tổng không có thì thêm cả dòng đấy vào sheet trên file tổng
- Sau khi hết sheet này thì đến sheet khác của file con.

- Chỉ cần so sánh 2 file cùng lúc sau đó làm lại với file khác(Ví dụ so sánh file tổng với file NT1, rồi sau đó file tổng với file NT2,...)


Nhờ các anh chị em xem giúp.

Trân trọng.
 
Upvote 0
Vì dung lượng upload file của mình hơi nhỏ nên mình đã xóa bớt một số sheet. Tổng quan thì các file này có cùng tổng số sheet, cùng tên sheet.
Về ý tưởng thì như sau:
- So sánh các sheet cùng tên nhau trên file tổng và file con.
- Với những dòng dữ liệu mà cả 2 sheet của 2 file giống nhau có thể là số thứ tự cũng được(Mình sẽ tùy biến cho phù hợp với thực tế) thì kiểm tra xem trên file con có giá trị nào khác file tổng không, nếu có thì đưa giá trị này vào.
- Với những dòng mà sheet của file con có mà sheet file tổng không có thì thêm cả dòng đấy vào sheet trên file tổng
- Sau khi hết sheet này thì đến sheet khác của file con.

- Chỉ cần so sánh 2 file cùng lúc sau đó làm lại với file khác(Ví dụ so sánh file tổng với file NT1, rồi sau đó file tổng với file NT2,...)


Nhờ các anh chị em xem giúp.

Trân trọng.

Bạn hiểu thuật toán rồi thì viết dần thôi, tự mình viết dễ hiểu hơn, gợi ý
- mở file tổng hợp
- mở từng file con:
+ kiểm tra theo từng sheet so sánh với file tông hợp sheet tương ứng (cái này đọc qua, theo bạn phải kiểm tra từng cell sử dụng - hơi bị nặng)
+ nếu giống, nếu khác ... thì xử lý
+ đóng file con
tiếp tục file con khác đến hết

--> dùng vòng lặp FOR,
mở file thì nên kiếm tìm trên diễn đàn xem mở tất cả file cùng thư mục thì thế nào

------------------
tôi đọc thì không hiểu, mà cũng ngại làm những việc kiểu gom cộng dữ liệu thế này
 
Upvote 0
Chào các anh chị trên diễn đàn GPE.

Mình có tham khảo các bài viết tương tự trên diễn đàn về vấn đề mà mình đang gặp phải.
Sau khi tham khảo các code và edit lại theo đúng nhu cầu của mình thì cho kết quả và nảy sinh vấn đề như sau:

1. Ý tưởng xử lý:
- mở file con.
- tìm kiếm dữ liệu riêng biệt duy nhất(primary key) của file con trên file tổng.
- Nếu không có thì copy cả dòng của file con vào file tổng.
-Nếu có thì kiểm tra các dữ liệu cùng dòng, nếu có khác biệt thì thay đổi theo giá trị của file con.

2. Kết quả và vấn đề nảy sinh:
- Code đã giải quyết được yêu cầu của mình.
- Nhưng thời gian thực thi quá chậm, mình làm mẫu với 60 dòng mà thời gian thực thi đến 1 phút 30.

Mình xin nhờ các anh chị trên diễn đàn xem giúp về code mà mình đã edit và cho mình xin phương án thay thế để giảm thời gian thực thi.

Dưới đây là code mình đã edit.

Sub SoSanhDL1()
Const cFilename = "MAU QUAN LY CONG VIEC NHA THAU-NT1.xlsm"
Dim cPath As String, Fullname As String
Dim wsh, Sh As Worksheet, Rng As Range, sRng As Range, Cls As Range
Dim MyAdd As String
Dim i As Integer
cPath = ActiveWorkbook.Path
Fullname = ActiveWorkbook.Path & "" & cFilename
Workbooks.Open (Fullname)

For Each wsh In ActiveWorkbook.Sheets
wsh.Select
Set Sh = Workbooks("MAU QUAN LY CONG VIEC NHA THAU.xlsm").Worksheets(wsh.Name)
Set Rng = Sh.Range(Sh.[b1], Sh.[b1000].End(xlUp))
For Each Cls In Range([b4], [b1000].End(xlUp))
Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
If sRng Is Nothing Then
With Sh.[b1000].End(xlUp).Offset(1)
.Resize(, 26).Value = Cls.Resize(, 26).Value
.Interior.ColorIndex = 35
End With
Else
MyAdd = sRng.Address
Do
For i = 5 To 18
With sRng.Offset(, i)
If .Value = "" Or .Value <> Cls.Offset(, i) Then .Value = Cls.Offset(, i).Value
End With
Next
Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
End If
Next Cls
Next
End Sub

File thực nghiệm:

https://www.dropbox.com/s/v06pwjbjcip5efd/Desktop.rar?dl=0
 
Lần chỉnh sửa cuối:
Upvote 0
Theo nội dung File bài 1 thì tôi tạo File TONG HOP, gồm 3 sheet:

1/ Sheet trang chủ: chứa các nút điều khiển, trong đó có nút lấy dữ liệu các sheet của các File: NT1, NT2, NT3................. Sau khi lấy dữ liệu xong thì nhấn nút xóa các sheet vừa tạo, thì chẳng cần nhiều sheet và so sánh cũ mới chi cho cực mà lại phức tạp ra.

2/ Sheet gộp các sheet: dùng gộp các sheet của các File: NT1, NT2, NT3................

3/ Sheet lưu theo dõi tất tần tật các thứ hầm bà, lằng nhằng vào đây.
 
Upvote 0
Web KT

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

Back
Top Bottom