Code VBA giúp tự động gộp và copy có điều kiện nhiều file thành 1 file tổng hợp báo cáo

Maika8008

Thành viên từ sao Hỏa
Tham gia ngày
12 Tháng sáu 2020
Bài viết
587
Được thích
498
Điểm
85
vậy mình chuẩn hóa thế nào khi chẳng có gì giống nhau ngoài vài cột có dữ liệu?
thậm chí cột có dữ liệ cũng có cái tên header khác nhau nữa?

Em đồng ý với anh là mình phải phân công đoạn - đó chính là cốt lõi trong việc code
nhưng ở đây việc phân công đoạn có lẽ mình tìm cách phân sao mà không phải chép vào 1 sheet -em nghĩ vậy-
Thiển ý của tôi là thế này. Trước tiên chỉ nhắm vào 5 file nguồn của chủ thớt đã cung cấp, chứ chưa cần biết (và không thể biết) sau này còn có thêm kiểu file nguồn nào nữa hay không. Dựa vào đó, tôi viết code cho thớt lần lượt lựa 1 trong 5 file cần lấy dữ liệu (nếu lựa trùng thì ráng chịu). Tôi đính kèm theo file đây. Bạn thnghiachau xem có thể triển khai theo hướng này được không hoặc thấy ý tưởng nào cần lấy để làm theo hướng của bạn thì lấy. Trong đấy, tôi tạm thời chưa xử lý cái cost2 và cost3, cái đó dễ -> làm sau.

P/S: Chạy sub Action_All rồi lựa file cần lấy dữ liệu.
 

File đính kèm

thnghiachau

Thành viên tiêu biểu
Tham gia ngày
14 Tháng chín 2009
Bài viết
705
Được thích
560
Điểm
860
Thiển ý của tôi là thế này. Trước tiên chỉ nhắm vào 5 file nguồn của chủ thớt đã cung cấp, chứ chưa cần biết (và không thể biết) sau này còn có thêm kiểu file nguồn nào nữa hay không. Dựa vào đó, tôi viết code cho thớt lần lượt lựa 1 trong 5 file cần lấy dữ liệu (nếu lựa trùng thì ráng chịu). Tôi đính kèm theo file đây. Bạn thnghiachau xem có thể triển khai theo hướng này được không hoặc thấy ý tưởng nào cần lấy để làm theo hướng của bạn thì lấy. Trong đấy, tôi tạm thời chưa xử lý cái cost2 và cost3, cái đó dễ -> làm sau.

P/S: Chạy sub Action_All rồi lựa file cần lấy dữ liệu.
Đúng rùi... "thấy gì làm đó" là một ý hay của bạn @Maika8008
Cám ơn bạn, mình sẽ dùng làm một số Function /Sub cuả bạn.
 

Maika8008

Thành viên từ sao Hỏa
Tham gia ngày
12 Tháng sáu 2020
Bài viết
587
Được thích
498
Điểm
85
Nhìn lại thì data của chủ thớt còn thiếu để ra kết quả hoàn chỉnh như thớt trình bày trong sheet Data. File Exxchenge Online Plan2 thì email không có (tôi để giá trị là NULL đó). File McAfeeEE User Registration thì phải trích email từ trường User Name/ID ra và nhiều record không có để trích
 

thnghiachau

Thành viên tiêu biểu
Tham gia ngày
14 Tháng chín 2009
Bài viết
705
Được thích
560
Điểm
860
Nhìn lại thì data của chủ thớt còn thiếu để ra kết quả hoàn chỉnh như thớt trình bày trong sheet Data. File Exxchenge Online Plan2 thì email không có (tôi để giá trị là NULL đó). File McAfeeEE User Registration thì phải trích email từ trường User Name/ID ra và nhiều record không có để trích
Đúng rùi... nói chung là chẳng có cái gì gọi là theo dạng nào đó để mà làm... cái nào thì làm cái đó ... đụng đâu mần đó như bạn @Maika8008 là có lẽ hay nhất !!!! ... nhưng mình vẫn đang nghĩ cách ... hổng biết có bạc đầu luôn không nữa...
 

Maika8008

Thành viên từ sao Hỏa
Tham gia ngày
12 Tháng sáu 2020
Bài viết
587
Được thích
498
Điểm
85
Đúng rùi... nói chung là chẳng có cái gì gọi là theo dạng nào đó để mà làm... cái nào thì làm cái đó ... đụng đâu mần đó như bạn @Maika8008 là có lẽ hay nhất !!!! ... nhưng mình vẫn đang nghĩ cách ... hổng biết có bạc đầu luôn không nữa...
Mình đâu có làm 1 dự án tổng thể. Người ta nhờ gì mình làm như vậy trớt cho rồi, chứ không khéo to tát quá họ lại chẳng biết dùng như thế nào, phí của.
 

quangtro

Thành viên mới
Tham gia ngày
26 Tháng sáu 2020
Bài viết
21
Được thích
0
Điểm
13
Tuổi
30
Nhìn lại thì data của chủ thớt còn thiếu để ra kết quả hoàn chỉnh như thớt trình bày trong sheet Data. File Exxchenge Online Plan2 thì email không có (tôi để giá trị là NULL đó). File McAfeeEE User Registration thì phải trích email từ trường User Name/ID ra và nhiều record không có để trích
- Đúng rồi bạn. File này lại không có cột email . Thật ra cột [ User name] trong file này chính là giá trị email đó bạn. ( mình ghi nhầm "loi.dangvan@bc" chứ không phải là "loi.dangvan.bc". Chắc phải sửa tên cột [ User name] này thành [ Email] và lấy giá trị đằng trước "@xxx" làm giá trị ở cột [User name/ ID] ở file tổng nhỉ. Vd "loi.dangvan@bc" thì chỉ lấy "loi.dangvan" cho giá trị ở cột [ User name/ID] ở file tổng. cột [Emai] thì lấy cột {Email].
Các file khác cũng tương tự chỉ dựa vào côt để lấy giá trị thôi.
- Mà mình vừa chạy thử thì nó không cho mình chọn cùng lúc nhiều file để gộp. có cách nào cho chọn file file cùng lúc để gộp không bạn.
- Cái nửa là khi mình bấm chọn tìm 1 file để gộp lần thứ nhất nó cho ra kết quả như mong muốn. nhưng nếu mình chọn tiếp file đó ở lần 2 thì nó cũng copy về trùng với dữ liệu của file đã copy về trước đó thành 2 dòng giống nhau. Mình muốn ràng buộc điều kiện là không cho copy các dòng dữ liệu giống nhau được không.
vd khi chọn file "2005 Exxchenge Online Plan2.xlsx" để gộp 2 lần thì nó sẽ ra kết quả 2 dòng dữ liệu giống nhau. Mình chỉ muốn nó xuất hiện 1 lần thôi cho dù chọn gộp file nó mấy lần đi nửa.
2005| 046016 | Exxchenge Online Plan2 | loi.dangvan.bc | loi.dangvan@bc
2005| 046016 | Exxchenge Online Plan2 | loi.dangvan.bc | loi.dangvan@bc
 
Lần chỉnh sửa cuối:

quangtro

Thành viên mới
Tham gia ngày
26 Tháng sáu 2020
Bài viết
21
Được thích
0
Điểm
13
Tuổi
30
Đúng rùi... nói chung là chẳng có cái gì gọi là theo dạng nào đó để mà làm... cái nào thì làm cái đó ... đụng đâu mần đó như bạn @Maika8008 là có lẽ hay nhất !!!! ... nhưng mình vẫn đang nghĩ cách ... hổng biết có bạc đầu luôn không nữa...
Đúng là Các file gửi tới không giống nhau về các trường tên cột bác ah. Nếu vậy mình chỉ dựa vào một cột "email" thôi và lấy dữ liệu như sau được không.
Dựa cột "email" ở các file cần gộp. mình lấy giá trị cho file tổng như sau.

cột "User name/ID" thì chỉ lấy giá trị trước "@xxx". vd: giá trị ở cột "email" ở file cần gộp là "loi.dangvan@bc" thì mình chỉ lấy "loi.dangvan" về thôi.
Cột "email" thì lấy giá trị đúng với chính nó.
 

Maika8008

Thành viên từ sao Hỏa
Tham gia ngày
12 Tháng sáu 2020
Bài viết
587
Được thích
498
Điểm
85
- Đúng rồi bạn. File này lại không có cột email . Thật ra cột [ User name] trong file này chính là giá trị email đó bạn. ( mình ghi nhầm "loi.dangvan@bc" chứ không phải là "loi.dangvan.bc". Chắc phải sửa tên cột [ User name] này thành [ Email] và lấy giá trị đằng trước "@xxx" làm giá trị ở cột [User name/ ID] ở file tổng nhỉ. Vd "loi.dangvan@bc" thì chỉ lấy "loi.dangvan" cho giá trị ở cột [ User name/ID] ở file tổng. cột [Emai] thì lấy cột {Email].
Các file khác cũng tương tự chỉ dựa vào côt để lấy giá trị thôi.
Thực ra cái email không có chưa phải là quan trọng, vấn đề ở chỗ trường User name của McAfeeEE User Registration có mấy dòng không cùng kiểu. Phải xử lý chúng mới lấy được User name để so sánh với các trường trong sheet staff để cho ra các giá trị cho cost2 và cost3

Ừ, mình có cho làm như thế đâu. Chỉ cần cho 1 vòng lặp là nó chạy hết 5 file

Tại sao bạn lại muốn chạy 1 file 2 lần? Tức là bạn chạy lần thứ 2 để làm gì? Tôi nghĩ là đến khi có file 2006... gì đó thì bạn mới tổng hợp tiếp chứ nhỉ? Bạn dựa vào User Name / ID để phân biệt các dòng phải không? Tức User Name / ID đó là khóa chính, chắc chắn trong cùng 1 IT Service, chúng không bao giờ lặp lại à?
 

quangtro

Thành viên mới
Tham gia ngày
26 Tháng sáu 2020
Bài viết
21
Được thích
0
Điểm
13
Tuổi
30
Thực ra cái email không có chưa phải là quan trọng, vấn đề ở chỗ trường User name của McAfeeEE User Registration có mấy dòng không cùng kiểu. Phải xử lý chúng mới lấy được User name để so sánh với các trường trong sheet staff để cho ra các giá trị cho cost2 và cost3


Ừ, mình có cho làm như thế đâu. Chỉ cần cho 1 vòng lặp là nó chạy hết 5 file


Tại sao bạn lại muốn chạy 1 file 2 lần? Tức là bạn chạy lần thứ 2 để làm gì? Tôi nghĩ là đến khi có file 2006... gì đó thì bạn mới tổng hợp tiếp chứ nhỉ? Bạn dựa vào User Name / ID để phân biệt các dòng phải không? Tức User Name / ID đó là khóa chính, chắc chắn trong cùng 1 IT Service, chúng không bao giờ lặp lại à?
- Thực ra cái email không có chưa phải là quan trọng, vấn đề ở chỗ trường User name của McAfeeEE User Registration có mấy dòng không cùng kiểu. Phải xử lý chúng mới lấy được User name để so sánh với các trường trong sheet staff để cho ra các giá trị cho cost2 và cost3
=> file "McAfeeEE User Registration" có 2 cột tên "Biz mail (confirmation)" giống nhau. Vậy mình đổi tên 1 cột thành "Email" và dựa vào cột email này để lấy giá trị cho cột "user name/id" và email ở file tổng nhé. cột "user name/id" thì chỉ lấy giá trị trước "@", cột email thì lấy hết lun giá trị của cột email đó. mình gửi lại file đính kèm cột email mình bôi màu vàng cho bạn dễ nhìn. Mình cũng cho về cùng kiểu hết rồi đó

- Ừ, mình có cho làm như thế đâu. Chỉ cần cho 1 vòng lặp là nó chạy hết 5 file
=> Vậy bạn sửa code cho chạy cùng lúc nhiều file giúp mình lun nhé. ( Có rất nhiều file).

- Tại sao bạn lại muốn chạy 1 file 2 lần? Tức là bạn chạy lần thứ 2 để làm gì? Tôi nghĩ là đến khi có file 2006... gì đó thì bạn mới tổng hợp tiếp chứ nhỉ? Bạn dựa vào User Name / ID để phân biệt các dòng phải không? Tức User Name / ID đó là khóa chính, chắc chắn trong cùng 1 IT Service, chúng không bao giờ lặp lại à?
=> Vì bạn code chỉ cho 1 lần chọn 1 file nên sợ ở lần sau chọn file khác lại bấm nhầm file đó tiếp thành ra trùng lặp. Nếu bạn code cho chạy cùng lúc nhiều file thì có thể bỏ qua yêu cầu này. Vì 1 lần là chọn được hết các file không bỏ sót file nào.
Bạn nói mình mới biết trong cùng 1 IT Service cùng tháng, các User Name/ID có thể trùng nhau. Nếu phát hiện trùng thì chắc tạo thêm cột "cost4" và lấy giá trị ở cột "unit price" vào cột "cost4" này quá..hihi

Tóm lại, Dữ liệu rất nhiều và riêng lẻ từng file nên mình phải tổng hợp về một file tổng để phân tích xem có sai xót và trùng lặp không.
. Nếu "user name/ID" và "IT service" sau khi copy về đúng với "user name" và It service tương ứng trong sheet "staff thì cột "cost2" mới lấy giá trị ở cột "unit price", còn không thì để trống.
. Nếu "user name/ID" và "IT service" sau khi copy về không đúng với "user name" và It service tương ứng trong sheet "staff thì cột "cost3" mới lấy giá trị ở cột "unit price", còn đúng thì để trống.
. Nếu "user name/ID" và "IT service" sau khi copy về mà trùng nhau hơn 1 dòng thì cột "cost4" mới lấy giá trị ở cột "unit price", còn không thì để trống.
 

File đính kèm

Maika8008

Thành viên từ sao Hỏa
Tham gia ngày
12 Tháng sáu 2020
Bài viết
587
Được thích
498
Điểm
85
- Thực ra cái email không có chưa phải là quan trọng, vấn đề ở chỗ trường User name của McAfeeEE User Registration có mấy dòng không cùng kiểu. Phải xử lý chúng mới lấy được User name để so sánh với các trường trong sheet staff để cho ra các giá trị cho cost2 và cost3
=> file "McAfeeEE User Registration" có 2 cột tên "Biz mail (confirmation)" giống nhau. Vậy mình đổi tên 1 cột thành "Email" và dựa vào cột email này để lấy giá trị cho cột "user name/id" và email ở file tổng nhé. cột "user name/id" thì chỉ lấy giá trị trước "@", cột email thì lấy hết lun giá trị của cột email đó. mình gửi lại file đính kèm cột email mình bôi màu vàng cho bạn dễ nhìn. Mình cũng cho về cùng kiểu hết rồi đó

- Ừ, mình có cho làm như thế đâu. Chỉ cần cho 1 vòng lặp là nó chạy hết 5 file
=> Vậy bạn sửa code cho chạy cùng lúc nhiều file giúp mình lun nhé. ( Có rất nhiều file).

- Tại sao bạn lại muốn chạy 1 file 2 lần? Tức là bạn chạy lần thứ 2 để làm gì? Tôi nghĩ là đến khi có file 2006... gì đó thì bạn mới tổng hợp tiếp chứ nhỉ? Bạn dựa vào User Name / ID để phân biệt các dòng phải không? Tức User Name / ID đó là khóa chính, chắc chắn trong cùng 1 IT Service, chúng không bao giờ lặp lại à?
=> Vì bạn code chỉ cho 1 lần chọn 1 file nên sợ ở lần sau chọn file khác lại bấm nhầm file đó tiếp thành ra trùng lặp. Nếu bạn code cho chạy cùng lúc nhiều file thì có thể bỏ qua yêu cầu này. Vì 1 lần là chọn được hết các file không bỏ sót file nào.
Bạn nói mình mới biết trong cùng 1 IT Service cùng tháng, các User Name/ID có thể trùng nhau. Nếu phát hiện trùng thì chắc tạo thêm cột "cost4" và lấy giá trị ở cột "unit price" vào cột "cost4" này quá..hihi

Tóm lại, Dữ liệu rất nhiều và riêng lẻ từng file nên mình phải tổng hợp về một file tổng để phân tích xem có sai xót và trùng lặp không.
. Nếu "user name/ID" và "IT service" sau khi copy về đúng với "user name" và It service tương ứng trong sheet "staff thì cột "cost2" mới lấy giá trị ở cột "unit price", còn không thì để trống.
. Nếu "user name/ID" và "IT service" sau khi copy về không đúng với "user name" và It service tương ứng trong sheet "staff thì cột "cost3" mới lấy giá trị ở cột "unit price", còn đúng thì để trống.
. Nếu "user name/ID" và "IT service" sau khi copy về mà trùng nhau hơn 1 dòng thì cột "cost4" mới lấy giá trị ở cột "unit price", còn không thì để trống.
Dữ liệu của bạn linh tinh quá. Do vậy bạn phải tự tìm hiểu nhiều vấn đề để tùy biến code phù hợp với nhu cầu của bạn. Nếu ỷ lại, sau này bạn dễ sa lầy vì không ai muốn sa vào mớ dữ liệu không chuẩn ấy để chỉnh sửa code cho bạn.
 

thnghiachau

Thành viên tiêu biểu
Tham gia ngày
14 Tháng chín 2009
Bài viết
705
Được thích
560
Điểm
860
Dữ liệu của bạn linh tinh quá. Do vậy bạn phải tự tìm hiểu nhiều vấn đề để tùy biến code phù hợp với nhu cầu của bạn. Nếu ỷ lại, sau này bạn dễ sa lầy vì không ai muốn sa vào mớ dữ liệu không chuẩn ấy để chỉnh sửa code cho bạn.
vậy bây giờ: vì dữ liệu bạn không chuẩn ở tất cả các file nên ban hãy lập ra một sheet ghi thông tin mỗi file cẩn lấy dữ liệu gì ở sheet nào cột nào.
Có như thế thì thì mới hy vọng code dc theo cái sheet thong tin này...
không thì XIN CHÀO BẠN vậy nhá !!!!
 

Maika8008

Thành viên từ sao Hỏa
Tham gia ngày
12 Tháng sáu 2020
Bài viết
587
Được thích
498
Điểm
85
vậy bây giờ: vì dữ liệu bạn không chuẩn ở tất cả các file nên ban hãy lập ra một sheet ghi thông tin mỗi file cẩn lấy dữ liệu gì ở sheet nào cột nào.
Có như thế thì thì mới hy vọng code dc theo cái sheet thong tin này...
không thì XIN CHÀO BẠN vậy nhá !!!!
Đề nghị này hợp lý đó. Không thì chẳng biết đường nào mà lần.
 

quangtro

Thành viên mới
Tham gia ngày
26 Tháng sáu 2020
Bài viết
21
Được thích
0
Điểm
13
Tuổi
30
Dữ liệu của bạn linh tinh quá. Do vậy bạn phải tự tìm hiểu nhiều vấn đề để tùy biến code phù hợp với nhu cầu của bạn. Nếu ỷ lại, sau này bạn dễ sa lầy vì không ai muốn sa vào mớ dữ liệu không chuẩn ấy để chỉnh sửa code cho bạn.
- Dữ liệu linh tinh mới cần tổng hợp và phân tích đó bạn.:)). Dữ liệu linh tinh thì mình sẽ chỉnh lại trước để về chung format.

vd Tên file thì mình sẽ đặt tên theo dạng "2005 Autodesk Software".

cột "Date" sẽ lấy 4 ký tự đầu làm giá trị ở file tổng
cột " IT service" sẽ lấy ký tự còn lại làm giá trị ở file tổng

Các file con cần gộp copy về thì bạn chỉ cần dựa vào cột DAC = 046016 để lấy dữ liệu về. Và chỉ cần lấy giá trị ở cột "DAC", cột "Email", cột "cost">0.

cột "DAC" thì đỗ dữ liệu về ở cột "DAC" trong file tổng
cột " Email" thì đỗ dữ liệu về ở cột "Email" trong file tổng
cột "cost" thì thì đỗ dữ liệu về ở cột "Unit price" và cột " cost1" trong file tổng. Với điều kiện cost>0
cột "Email" thì thì đỗ dữ liệu về ở cột "User name/ID" trong file tổng. Nhưng chỉ lấy giá trị trước"@". vd: "loi.dangvan@bc" thì chỉ lấy "loi.dangvan".

- Còn về phần có dữ liệu đã gộp về rồi thì lại so sánh với sheet "staff".

cột "cost2" sẽ lấy giá trị của cột "unit price" nếu cột "User name/ID" và "IT service" có trong "user name" và các cột it service tương ứng,còn không thì để trống
Vd nếu cột "User Name/ID" ="huu.hoangtuan" và cột" IT Service"= "McAfeeEE User Registration" thì kiểm tra xem "huu.hoangtuan" có ở trong cột "User Name" và trong cột "McAfeeEE User Registration' ở sheet "staff" không. Nếu có thì giá trị cột "cost2" = cột "Unit price". tức là = 900. còn không thì để trống.

Ngược lại cột "cost3" sẽ lấy giá trị của cột "unit price" nếu cột "User name/ID" và "IT service" không có trong "user name" và các cột it service tương ứng,còn có rồi thì để trống.

Còn cột "cost4' phát sinh khó quá thì bỏ qua.

Mình không biết code nên mới lên đây hỏi và nhờ mọi người giúp chứ không có ỷ lại vào ai cả.
Sau khi được sự giúp đỡ có code như ý muốn rồi thì mình sẽ tìm hiểu và ứng biến cho mỗi lần thay đổi về yêu cầu sau này. Nếu khó quá thì lên đây hỏi tiếp.. :)). Mọi người giúp được thì mình cảm ơn, còn không thì không sao cả.
 

thnghiachau

Thành viên tiêu biểu
Tham gia ngày
14 Tháng chín 2009
Bài viết
705
Được thích
560
Điểm
860
- Dữ liệu linh tinh mới cần tổng hợp và phân tích đó bạn.:)). Dữ liệu linh tinh thì mình sẽ chỉnh lại trước để về chung format.

vd Tên file thì mình sẽ đặt tên theo dạng "2005 Autodesk Software".

cột "Date" sẽ lấy 4 ký tự đầu làm giá trị ở file tổng
cột " IT service" sẽ lấy ký tự còn lại làm giá trị ở file tổng

Các file con cần gộp copy về thì bạn chỉ cần dựa vào cột DAC = 046016 để lấy dữ liệu về. Và chỉ cần lấy giá trị ở cột "DAC", cột "Email", cột "cost">0.

cột "DAC" thì đỗ dữ liệu về ở cột "DAC" trong file tổng
cột " Email" thì đỗ dữ liệu về ở cột "Email" trong file tổng
cột "cost" thì thì đỗ dữ liệu về ở cột "Unit price" và cột " cost1" trong file tổng. Với điều kiện cost>0
cột "Email" thì thì đỗ dữ liệu về ở cột "User name/ID" trong file tổng. Nhưng chỉ lấy giá trị trước"@". vd: "loi.dangvan@bc" thì chỉ lấy "loi.dangvan".

- Còn về phần có dữ liệu đã gộp về rồi thì lại so sánh với sheet "staff".

cột "cost2" sẽ lấy giá trị của cột "unit price" nếu cột "User name/ID" và "IT service" có trong "user name" và các cột it service tương ứng,còn không thì để trống
Vd nếu cột "User Name/ID" ="huu.hoangtuan" và cột" IT Service"= "McAfeeEE User Registration" thì kiểm tra xem "huu.hoangtuan" có ở trong cột "User Name" và trong cột "McAfeeEE User Registration' ở sheet "staff" không. Nếu có thì giá trị cột "cost2" = cột "Unit price". tức là = 900. còn không thì để trống.

Ngược lại cột "cost3" sẽ lấy giá trị của cột "unit price" nếu cột "User name/ID" và "IT service" không có trong "user name" và các cột it service tương ứng,còn có rồi thì để trống.

Còn cột "cost4' phát sinh khó quá thì bỏ qua.

Mình không biết code nên mới lên đây hỏi và nhờ mọi người giúp chứ không có ỷ lại vào ai cả.
Sau khi được sự giúp đỡ có code như ý muốn rồi thì mình sẽ tìm hiểu và ứng biến cho mỗi lần thay đổi về yêu cầu sau này. Nếu khó quá thì lên đây hỏi tiếp.. :)). Mọi người giúp được thì mình cảm ơn, còn không thì không sao cả.
Nhìn thấy bạn ghi dài quá... nên mình không đọc chữ nào luôn mà chỉ đợi bạn cho cái sheet ghi thông tin mỗi file cẩn lấy dữ liệu gì ở sheet nào cột nào mà thôi... !!!! những cái mà không có lấy từ sheet mà lấy thông tin từ tên File thì không cần ghi ra. cái việc này không cần bạn phải biết code gì ráo đâu nhé....
Và lần nữa : không có thì XIN CHÀO BẠN vậy nhá !!!!
 

quangtro

Thành viên mới
Tham gia ngày
26 Tháng sáu 2020
Bài viết
21
Được thích
0
Điểm
13
Tuổi
30
Mình mô tả rõ vậy mà bạn không hiểu ah. Mỗi file chỉ lấy dữ liệu ở cột có tên "DAC", "Email", "cost". Với điều kiện DAC= 046016, cost>0.
Sau khi lấy về rồi thì so sánh với sheet "staff" để lấy giá trị cho ở cột "cost2" và cột "cost3".

Cụ thể bạn xem file đính kèm trong sheet "Du lieu can lay cho sheet Data" theo yêu cầu của bạn để rõ hơn nhé
 

File đính kèm

Lần chỉnh sửa cuối:

thnghiachau

Thành viên tiêu biểu
Tham gia ngày
14 Tháng chín 2009
Bài viết
705
Được thích
560
Điểm
860
Mình mô tả rõ vậy mà bạn không hiểu ah. Mỗi file chỉ lấy dữ liệu ở cột có tên "DAC", "Email", "cost". Với điều kiện DAC= 046016, cost>0.
Sau khi lấy về rồi thì so sánh với sheet "staff" để lấy giá trị cho ở cột "cost2" và cột "cost3".

Cụ thể bạn xem file đính kèm trong sheet "Thong tin cần lấy dữ liệu" theo yêu cầu của bạn để rõ hơn nhé
OK, Nếu bạn vẫn cố chấp không làm như mình nói thì mình xin BÁI BAI bạn vậy!!
Mà trước khi mình rút thì mình nói cho bạn biết ràng VBA nó "ngu" lắm...
file bạn đưa lên làm sao biết lấy Sheet nào? vì mỗi file mỗi tên sheet khác nhau, chưa hết bạn nói lấy cột có tên Email.. thì có file chẳng có nữa đây... mà lại là một tên khác... thì sao mà biết đây???
Ok mình xin rút...
và mình nghĩ sẽ chẳng có ai có thể giúp bạn dc nếu như vậy!!!!
 

quangtro

Thành viên mới
Tham gia ngày
26 Tháng sáu 2020
Bài viết
21
Được thích
0
Điểm
13
Tuổi
30
OK, Nếu bạn vẫn cố chấp không làm như mình nói thì mình xin BÁI BAI bạn vậy!!
Mà trước khi mình rút thì mình nói cho bạn biết ràng VBA nó "ngu" lắm...
file bạn đưa lên làm sao biết lấy Sheet nào? vì mỗi file mỗi tên sheet khác nhau, chưa hết bạn nói lấy cột có tên Email.. thì có file chẳng có nữa đây... mà lại là một tên khác... thì sao mà biết đây???
Ok mình xin rút...
và mình nghĩ sẽ chẳng có ai có thể giúp bạn dc nếu như vậy!!!!
OK, Nếu bạn vẫn cố chấp không làm như mình nói thì mình xin BÁI BAI bạn vậy!!
Bạn yêu cầu làm một sheet ghi rõ thông tin mỗi file cần lấy dữ liệu gì ở cột nào thì mình đã đáp ứng bằng file đính kèm.
Lấy cột có tên "DAC", "Email", "cost". Với điều kiện DAC= 046016, cost>0. chỉ không biết tên sheet cụ thể thôi ( nhưng mà mà mình thấy bạn
Maika8008 code được và mình cũng đã chạy được, chỉ là sau khi copy dữ liệu về file tổng thì chưa viết code để so sánh với sheet "staff" để lấy giá trị cho cột "cost2" và "cost3" thôi ).
=> Bạn yêu cầu mình đáp ứng sao nói mình cố chấp.
File nào không có cột tên Email thì mình sẽ đặt lại tên trước khi code.
"chưa hết bạn nói lấy cột có tên Email.. thì có file chẳng có nữa đây... mà lại là một tên khác... thì sao mà biết đây???"
=> lấy cột "mà lại là một tên khác" đó đặt tên lại thành Email.

Mình cũng đã chỉnh sửa trước luôn các tên file, tên sheet và tên cột trong các file con để thống nhất trước khi code rồi nhé
 

File đính kèm

Lần chỉnh sửa cuối:

thnghiachau

Thành viên tiêu biểu
Tham gia ngày
14 Tháng chín 2009
Bài viết
705
Được thích
560
Điểm
860
OK, Nếu bạn vẫn cố chấp không làm như mình nói thì mình xin BÁI BAI bạn vậy!!
Bạn yêu cầu làm một sheet ghi rõ thông tin mỗi file cần lấy dữ liệu gì ở cột nào thì mình đã đáp ứng bằng file đính kèm.
Lấy cột có tên "DAC", "Email", "cost". Với điều kiện DAC= 046016, cost>0. chỉ không biết tên sheet cụ thể thôi ( nhưng mà mà mình thấy bạn
Maika8008 code được và mình cũng đã chạy được, chỉ là sau khi copy dữ liệu về file tổng thì chưa viết code để so sánh với sheet "staff" để lấy giá trị cho cột "cost2" và "cost3" thôi ).
=> Bạn yêu cầu mình đáp ứng sao nói mình cố chấp.
File nào không có cột tên Email thì mình sẽ đặt lại tên trước khi code.
"chưa hết bạn nói lấy cột có tên Email.. thì có file chẳng có nữa đây... mà lại là một tên khác... thì sao mà biết đây???"
=> lấy cột "mà lại là một tên khác" đó đặt tên lại thành Email.

Mình cũng đã chỉnh sửa trước luôn các tên file, tên sheet và tên cột trong các file con để thống nhất trước khi code rồi nhé
OK Vì mình đã thấy bạn:
1/ Edit lại bài viết => chỉnh lại Câu nói không hay trở thành "văn tốt" lại (cái mà bạn chưa chỉnh mình cũng đã đọc dc rùi nhá!!!)
2/ qua cách bạn trả lời mình "ngộ ra" bạn thật sự chưa hiểu cái mà mình yêu cầu bạn!

Do đó, mình làm cho bạn từ A->Z.... đây.
Tôi tạo thêm sheet"Config" chính là cái mà tôi đã yêu cầu bạn làm.
với sheet"Config" này thì bạn có thể làm với bất cứ file như thế nào cũng lấy dữ liệu đúng với điều kiện bạn config đúng.
Cách Config:
1/ nhấn "Get List File" -< hiện File Dialog -> chọn folder chứa các file cần lấy dữ liệu. Sau đó nó sẽ list toàn bộ tên file có trong folder đã chọn vào cột B (File Name). Chú ý: các file lấy dữ liệu phải để vào cùng thương mục nha!!!!
2/ ứng với từ tên file trong cột B bạn chon cell Cột C hiện validation là list các tên sheet có trong file đó. -> chọn sheet cần lấy dữ liệu
(tôi tạo cái này để bạn không phải viết tay các tên file và tên sheet=> nhanh chóng và tiện lơi và không bị sai sót!!!)
3/ Điền đầy đủ các giá trị từ cột D tới H (cái nào không có thì để trống)
4/ Sau khi hoàn tất config thì bạn qua sheet"Data" -> nhấn "Collect Data"

Trong code tôi làm còn 2 vấn đề chưa giải quyết vì chưa thật sự hiểu là như thế nào:
1/ việc trùng dữ liệu ???
2/ Cost4 ???

tôi gởi cho bạn lại các file nguyên thủy mà bạn gởi vì tôi làm trên mấy file này! Làm vậy cho ban thấy là sau khi dùng config thì file như thế nào cũng làm dc, và bạn có thể tùy biến cho các file khác có cấu trúc không giống nhau trong tương lai khi bạn sử dụng.

1595610353096.png
bạn thấy không? các file cần lấy Data của bạn không có cái nào giống cái nào hết ah!!!

Và cuối cùng bạn phải hiểu vì sao tôi hỏi nhiều với bạn chưa? vì:
1/ qua cái tôi hỏi thì bạn sẽ ngộ ra vấn đề mà của bạn cho chính bạn (bạn thấy dc cái mà mình chưa thấy như Cost4 chẳng hạn)
2/ tôi muốn hướng đẫn bạn từng bước để sau này bạn sử dụng thuận tiện và đễ dàng hơn cái mà người ta giúp bạn.
3/ là tôi không muốn bạn ỷ lại vào người ta hoàn toàn (khi mà bạn có dc cái mình muốn quá dễ dàng)

hazzz.. qua 12g đêm rùi...
 

File đính kèm

quangtro

Thành viên mới
Tham gia ngày
26 Tháng sáu 2020
Bài viết
21
Được thích
0
Điểm
13
Tuổi
30
OK Vì mình đã thấy bạn:
1/ Edit lại bài viết => chỉnh lại Câu nói không hay trở thành "văn tốt" lại (cái mà bạn chưa chỉnh mình cũng đã đọc dc rùi nhá!!!)
2/ qua cách bạn trả lời mình "ngộ ra" bạn thật sự chưa hiểu cái mà mình yêu cầu bạn!

Do đó, mình làm cho bạn từ A->Z.... đây.
Tôi tạo thêm sheet"Config" chính là cái mà tôi đã yêu cầu bạn làm.
với sheet"Config" này thì bạn có thể làm với bất cứ file như thế nào cũng lấy dữ liệu đúng với điều kiện bạn config đúng.
Cách Config:
1/ nhấn "Get List File" -< hiện File Dialog -> chọn folder chứa các file cần lấy dữ liệu. Sau đó nó sẽ list toàn bộ tên file có trong folder đã chọn vào cột B (File Name). Chú ý: các file lấy dữ liệu phải để vào cùng thương mục nha!!!!
2/ ứng với từ tên file trong cột B bạn chon cell Cột C hiện validation là list các tên sheet có trong file đó. -> chọn sheet cần lấy dữ liệu
(tôi tạo cái này để bạn không phải viết tay các tên file và tên sheet=> nhanh chóng và tiện lơi và không bị sai sót!!!)
3/ Điền đầy đủ các giá trị từ cột D tới H (cái nào không có thì để trống)
4/ Sau khi hoàn tất config thì bạn qua sheet"Data" -> nhấn "Collect Data"

Trong code tôi làm còn 2 vấn đề chưa giải quyết vì chưa thật sự hiểu là như thế nào:
1/ việc trùng dữ liệu ???
2/ Cost4 ???

tôi gởi cho bạn lại các file nguyên thủy mà bạn gởi vì tôi làm trên mấy file này! Làm vậy cho ban thấy là sau khi dùng config thì file như thế nào cũng làm dc, và bạn có thể tùy biến cho các file khác có cấu trúc không giống nhau trong tương lai khi bạn sử dụng.

View attachment 241782
bạn thấy không? các file cần lấy Data của bạn không có cái nào giống cái nào hết ah!!!

Và cuối cùng bạn phải hiểu vì sao tôi hỏi nhiều với bạn chưa? vì:
1/ qua cái tôi hỏi thì bạn sẽ ngộ ra vấn đề mà của bạn cho chính bạn (bạn thấy dc cái mà mình chưa thấy như Cost4 chẳng hạn)
2/ tôi muốn hướng đẫn bạn từng bước để sau này bạn sử dụng thuận tiện và đễ dàng hơn cái mà người ta giúp bạn.
3/ là tôi không muốn bạn ỷ lại vào người ta hoàn toàn (khi mà bạn có dc cái mình muốn quá dễ dàng)

hazzz.. qua 12g đêm rùi...
Cảm ơn bạn đã quay lại và code giúp mình. Nhưng bạn xem giúp mình 2 phần sau.
1) Điều kiện lấy dữ liệu về là DAC=046016 và cost >0
mà bạn code dữ liệu về có cả phần cost trống. vd
2005046016McAfeeEE User Registrationtam.vovantam.vovan@bcd
900​
1
900​
900​
2005046016McAfeeEE User Registrationtam.vovantam.vovan@bcd

=> dòng nào không thỏa điều kiện ở cột cost> 0 thì khỏi copy về.

2) giá trị ở cột cost2, cost3 lấy về bị nhầm rồi. giá trị ở cột cost2,cost3 dựa vào phép so sánh như sau.
. Cost2 : Ứng với mỗi loại IT service. Nếu giá trị ở cột user name/id đươc lấy về khớp với giá trị ở các it service tương ứng bên sheet "staff" thì cột cost2 mới lấy giá trị ở cột unit price tương ứng còn không thì để trống.

.Cost3 : Ứng với mỗi loại IT service. Nếu giá trị ở cột user name/id đươc lấy về khớp với giá trị ở các it service tương ứng bên sheet "staff" thì cột cost3 để trống còn không thì lấy giá trị ở cột unit price tương ứng.

Như kết quả dữ liệu dc lấy về như sau bị nhầm rồi.

DateDACIT ServiceUser Name / IDEmailUnit PriceQtyCost1Cost2Cost3
2005046016Exxchenge Online Plan2loi.dangvan.bc
1,360​
1
1,360​
1,360​
2005046016IT FeeALEX.DINGalex.ding@bc
5,600​
1
5,600​
5,600​
2005046016IT FeeARAI.NORIYUKIarai.noriyuki@bc
5,600​
1
5,600​
5,600​

Xét "ARAI.NORIYUKI" được lấy về, nếu đem so sánh với cột "it fee" ở sheet "staff" thì rõ ràng "ARAI.NORIYUKI" có tồn tại.Vậy cost2 phải lấy giá trị cột unit price tương ứng là 5,600. Nhưng kết quả lại để trống mà gán giá trị cho cost3. hình như bạn hiểu ngược lại ý mình thì phải.

Nay bị stress hơi bị căng thẳng nên phản hồi bài bạn chậm. Còn phần copy dữ liệu không bị trùng với cost4 thì sau hẵn tính.
Được cái trên ok đã rồi tính tiếp. còn 2 cái sau cùng mình làm tay cũng được.:))
 

thnghiachau

Thành viên tiêu biểu
Tham gia ngày
14 Tháng chín 2009
Bài viết
705
Được thích
560
Điểm
860
Cảm ơn bạn đã quay lại và code giúp mình. Nhưng bạn xem giúp mình 2 phần sau.
1) Điều kiện lấy dữ liệu về là DAC=046016 và cost >0
mà bạn code dữ liệu về có cả phần cost trống. vd
2005046016McAfeeEE User Registrationtam.vovantam.vovan@bcd
900​
1
900​
900​
2005046016McAfeeEE User Registrationtam.vovantam.vovan@bcd

=> dòng nào không thỏa điều kiện ở cột cost> 0 thì khỏi copy về.

2) giá trị ở cột cost2, cost3 lấy về bị nhầm rồi. giá trị ở cột cost2,cost3 dựa vào phép so sánh như sau.
. Cost2 : Ứng với mỗi loại IT service. Nếu giá trị ở cột user name/id đươc lấy về khớp với giá trị ở các it service tương ứng bên sheet "staff" thì cột cost2 mới lấy giá trị ở cột unit price tương ứng còn không thì để trống.

.Cost3 : Ứng với mỗi loại IT service. Nếu giá trị ở cột user name/id đươc lấy về khớp với giá trị ở các it service tương ứng bên sheet "staff" thì cột cost3 để trống còn không thì lấy giá trị ở cột unit price tương ứng.

Như kết quả dữ liệu dc lấy về như sau bị nhầm rồi.

DateDACIT ServiceUser Name / IDEmailUnit PriceQtyCost1Cost2Cost3
2005046016Exxchenge Online Plan2loi.dangvan.bc
1,360​
1
1,360​
1,360​
2005046016IT FeeALEX.DINGalex.ding@bc
5,600​
1
5,600​
5,600​
2005046016IT FeeARAI.NORIYUKIarai.noriyuki@bc
5,600​
1
5,600​
5,600​

Xét "ARAI.NORIYUKI" được lấy về, nếu đem so sánh với cột "it fee" ở sheet "staff" thì rõ ràng "ARAI.NORIYUKI" có tồn tại.Vậy cost2 phải lấy giá trị cột unit price tương ứng là 5,600. Nhưng kết quả lại để trống mà gán giá trị cho cost3. hình như bạn hiểu ngược lại ý mình thì phải.

Nay bị stress hơi bị căng thẳng nên phản hồi bài bạn chậm. Còn phần copy dữ liệu không bị trùng với cost4 thì sau hẵn tính.
Được cái trên ok đã rồi tính tiếp. còn 2 cái sau cùng mình làm tay cũng được.:))
Ah Sorry cái dzụ cost>0...
còn cái cost2; Cost3 là vì cái user của bạn lúc viết in lúc không viết in nên nó bị sai khi so sanh thôi!, nhưng mình viết code lại, cho dù in hay không in thì cũng đúng ....
cái trùng hay không trùng Data với cost4 bạn cho ví dụ đi mình viết cho nha.
Bạn coi file nha...
 

File đính kèm

Top Bottom