Cách coppy một cột dữ liệu từ nhiều file vào 1 file, các cột này xếp cạnh nhau chứ không nối đuôi nhau trong file tổng

Liên hệ QC

vonguyen3745

Thành viên hoạt động
Tham gia
18/7/09
Bài viết
145
Được thích
5
Nhờ các bác chỉ giúp cách copy dữ liệu (một cột) từ nhiều file vào file tổng (các cột này được xếp cạnh nhau chứ không nối đuôi nhau trong file tổng), Cụ thể trong file đính kèm
 

File đính kèm

  • Dulieu.zip
    22.3 KB · Đọc: 6
Cách hay code?

Cách:
1. Dùng FileSystemObject lấy tên files vào một collection.
2. Dùng vòng lặp duyệt collection.
2.1 Copy cột vào array
2.2 Copy array vào cột kế tiếp của file chính
2.3 Dời cột kế tiếp qua bên phải 1 bước
 
Lần chỉnh sửa cuối:
Bài này có ai viết ADO không nhỉ? :(
Trả lời theo VBA thông thường:
Nếu một cột tiếp nối thì được (dùng Union).
Nhưng nhiều cột kế tiếp thì không nên. Không phải là không được, nhưng pivot như vậy là đi phản lại luật CSDL LH của SQL. Trong khi SQL là cách truy vấn căn bản của ADO.

Trả lời theo lý thuyết lập trình:
Nếu bạn quen viết code theo module. Cấu trúc (structured) hay hướng đối tượng (object oriented) gì cũng vậy; giải thuật sẽ chia ra làm 3 phần:
1. phần 1 gồm code lấy files
2. phần 2 là 1 hàm lấy dữ liệu từ file và đổ vào mảng
3. phần 3 là 1 hàm/sub đổ dữ liệu từ mảng vào file chủ.
Ở phần 2, bạn muốn lấy dữ liệu bằng cách nào là chuyện của bạn, ADO hay kiểu gì cũng được. Miễn là nó trả về 1 mảng. Code module chính chỉ việc gọi nó ra để lấy mảng dữ liệu. Một ngày nào đó, bạn cảm thấy có kiểu khác hay hơn thì chỉ sửa hàm 2 thôi, hầu như khong cần đá dộng đến phần khác.
Cái hay, cái đẹp của kỹ thuật chia code ra từng hàm nhỏ là vậy. Ở diễn đàn này, các bạn quen viết code 1 sub duy nhất cho nên nhiều người tuy code đã nhiều năm vẫn không nắm nổi kỹ thuật này.

' code láy file collection ở đây
For each meFile In FileCollection
CopDuLieu LayDuLieu(meFile.Name)
Next meFile

Function LayDuLieu(byVal fName As String) As Variant
' code mở file thì mở file và đọc range: LayDuLieu = .Range(...).Value
' code ADO thì lấy recordset và: LayDuLieu = rs.GetRows()
End Function

Sub CopDuLieu(meArray As Variant)
' code tìm ô để cóp vào ở đây
.Range("ô để cóp").Resize(Ubound(meArray,1), UBound(meArray,2)).Value = meArray
Endn Sub
 
Trả lời theo VBA thông thường:
Ở diễn đàn này, các bạn quen viết code 1 sub duy nhất cho nên nhiều người tuy code đã nhiều năm vẫn không nắm nổi kỹ thuật này.

Chưa chắc không nắm được kỹ thuật nha anh, nhiều khi cố tình gộp hết vào chung 1 sub cho đơn giản, như VBA vốn dĩ là giản dị, chừng nào học xê cọng cọng mấy trăm đô hoa kỳ mới cần nhiều kỹ thuật cao như anh nói nhé.
 
Chưa chắc không nắm được kỹ thuật nha anh, nhiều khi cố tình gộp hết vào chung 1 sub cho đơn giản, như VBA vốn dĩ là giản dị, chừng nào học xê cọng cọng mấy trăm đô hoa kỳ mới cần nhiều kỹ thuật cao như anh nói nhé.
Kỹ thuật mô đun nằm trong lý thuyết lập trình căn bản. Học chỉ chục đô huê kỳ là nhiều rồi. Làm gì đến mấy trăm.
Người dạy mấy trăm đô kia chắc là dạy mấy cái ứng dụng pi eo xi. Tức là dạy cách gọi mấy cái đối tượng điểu khiển.
Ví dụ lúc lắp cái pi eo xi, tôi cố tình giữ lại cái DVD của hãng (Xi Meng gì đó) cung cấp. Không có cái đó và cuốn sách hướng dẫn thì bên người dùng cùi thôi. Muốn làm gì cũng phải hỏi. Tôi nắm đằng cán, muốn dạy mấy trăm đô lại chẳng được.
Hồi xưa (thập niên 90) mấy thằng chuyên viên đi Tiệp về vẫn đến các nhà máy, lắp các bộ phận điều khiển bằng microprocessor (điển hình là 8085A) và giấu cuốn sách code như mèo giấu ***. Không có cuốn đó thì thánh cũng chịu thua. Ai mà nhớ hết mấy cái lệnh máy. Muốn chỉnh sửa điều khiển gì lại phải gọi chúng làm. (thiệt ra mấy thằng đó làm bộ choi nguy hiểm chứ ngừoi dùng dẫu có biết code cũng không chỉnh được, vì cần phải có cái máy load code nữa)
 
Web KT
Back
Top Bottom