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

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
Chào mọi người

em có 1 vấn đề về Excel cần mọi người giúp đỡ về code VBA tự động như sau

Mỗi tháng bên HQ đều gửi rất nhiều file về chi phí IT rất riêng lẻ và các filecũng không đồng nhất các sheet, số cột, dòng và trường dữ liệu.
Em có nhu cầu muốn gộp tất cả các file vào 1 file tổng hợp duy nhất để báo cáo.
Trong tất cả các file mà HQ gửi tới. em chỉ cần lọc giá trị ở cột [DAC] = 046016 và copy các giá trị đã lọc của những cột cần thiết về 1 file chung để làm báo cáo để giảm bớt thao tác thủ công mở từng file lọc và copy từng cột mong muốn về 1 file chung.

Mong muốn cụ thể mọi người xem qua file đính kèm và code giúp em nha.

Cảm ơn mọi người nhiều.
 

File đính kèm

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

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
10,359
Được thích
12,634
Điểm
1,560
Nếu bạn không làm từng file thì làm sao biết lúc lấy có thiếu sót hay sai lầm gì?

VBA là giải pháp lười biếng (*). Loại công việc này thì cần tự phát triển với các chức năng mới của Excel.
Túm lại, cần học Power Query gấp.

(*) thực ra, nếu muốn được kết quả đáng tin cậy bằng VBA thì cũng phải kiểm soát và hiệu chỉnh thường xuyê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
Nếu bạn không làm từng file thì làm sao biết lúc lấy có thiếu sót hay sai lầm gì?

VBA là giải pháp lười biếng (*). Loại công việc này thì cần tự phát triển với các chức năng mới của Excel.
Túm lại, cần học Power Query gấp.

(*) thực ra, nếu muốn được kết quả đáng tin cậy bằng VBA thì cũng phải kiểm soát và hiệu chỉnh thường xuyên.
Cảm ơn bạn đã xem bài.
- Sau khi dữ liệu được gộp và copy về file chung, mình sẽ dùng pivot table để thống kê ra được con số tổng. Và tất nhiên mình sẽ phải mở từng file con tương ứng ra xem để so sánh số tổng có khớp không. vì mỗi file con đều có 1 shheet thể hiện con số tổng đó, sort DAC mình cần là thấy ngay. Vấn đề là em chỉ muốn copy những cột cần thiết ở các file con gộp về file chung để làm báo cáo tổng hợp.

- Còn về phần phải kiểm soát và hiệu chỉnh thường xuyên thì mình có nói trong mô tả ở file đính kèm. nếu cần đổi tên file hay đổi tên cột trong các file con để đưa về 1 thể thống nhất cho code dễ thì chắc chắn sẽ làm theo.
 

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
Chào mọi người

em có 1 vấn đề về Excel cần mọi người giúp đỡ về code VBA tự động như sau

Mỗi tháng bên HQ đều gửi rất nhiều file về chi phí IT rất riêng lẻ và các filecũng không đồng nhất các sheet, số cột, dòng và trường dữ liệu.
Em có nhu cầu muốn gộp tất cả các file vào 1 file tổng hợp duy nhất để báo cáo.
Trong tất cả các file mà HQ gửi tới. em chỉ cần lọc giá trị ở cột [DAC] = 046016 và copy các giá trị đã lọc của những cột cần thiết về 1 file chung để làm báo cáo để giảm bớt thao tác thủ công mở từng file lọc và copy từng cột mong muốn về 1 file chung.

Mong muốn cụ thể mọi người xem qua file đính kèm và code giúp em nha.

Cảm ơn mọi người nhiều.
Quá nhiều việc để đáp ứng yêu cầu của bạ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
Quá nhiều việc để đáp ứng yêu cầu của bạn.
Vậy mới biết mình phải làm thủ công như thế nào :))
Nếu bỏ bớt yêu cầu ra cho đơn giản lại thì bạn sẽ bỏ những yêu cầu nào và làm được những gì. Nếu khó quá mình chỉ cần copy nội dung các file theo điều kiện về 1 file chung thôi cũng được. Những việc còn lại mình dùng hàm hay làm thủ công cũng được.
- Trong file " IT summary" đính kèm có có tất cả 5 yêu cầu. nếu bỏ bớt thì có thể bỏ bớt
+ bỏ yêu cầu 2 (mình mở từng file để kiểm tra trước. nếu file nào không có cột [DAC] =046016 thì mình bỏ qua không cho thêm vào để gộp)
+ yêu cầu 3
. . Về phần lấy giá trị cột [Date] và cột [IT Service] trong file file tổng. mình có thể sữa trước các tên file con về 1 dạng thống nhất. Vd tên file luôn bắt đầu bằng số + ký tự. Ta code để lấy phần số cho giá trị ở cột [Date], phần ký tự sẽ lấy giá trị, lấy phần ký tự cho giá trị ở cột [IT Service]
. Về phần lấy giá trị cho cột [User Name/ID] trong file tổng thì có thể sửa tên cột ở các file con về chung 1 tên thống nhất để dễ code. Vd nếu file con có tên "2005 MR-005 (McAfeeEE User Registration).xlsx" có cột [Account name] thì mình sữa tay trước thành cột [User Name]. File "2005 MR-005 (McAfeeEE User Registration).xlsx" có cột [PC Name] thì mình sữa tay trước thành cột [User name].

+ Bỏ yêu cầu 5.

Nếu bỏ bớt những yêu cầu trên thì có đơn giản hơn và khả năng code được không mọi người.
 
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
Chào mọi người

em có 1 vấn đề về Excel cần mọi người giúp đỡ về code VBA tự động như sau

Mỗi tháng bên HQ đều gửi rất nhiều file về chi phí IT rất riêng lẻ và các filecũng không đồng nhất các sheet, số cột, dòng và trường dữ liệu.
Em có nhu cầu muốn gộp tất cả các file vào 1 file tổng hợp duy nhất để báo cáo.
Trong tất cả các file mà HQ gửi tới. em chỉ cần lọc giá trị ở cột [DAC] = 046016 và copy các giá trị đã lọc của những cột cần thiết về 1 file chung để làm báo cáo để giảm bớt thao tác thủ công mở từng file lọc và copy từng cột mong muốn về 1 file chung.

Mong muốn cụ thể mọi người xem qua file đính kèm và code giúp em nha.

Cảm ơn mọi người nhiều.
Cho mình hỏi:
1/ tên file là có format giống nhau hết như các file đính kèm đã gỏi?
4 ký tự đầu luôn là năm?
như "2005 MR-001 (Autodesk Software).xlsx" => có format là: yyyy **** (****)? =>lấy phần trong ngoặc?
hoặc như "2005 Exxchenge Online Plan2.xlsx" => có format là: yyyy **** => lấy toàn bộ ****?
2/ trong "2005 MR-020 (Office 365 MS Project).xlsx" =>User Name / ID ở đâu?
3/ giải quyết vấn đề "không được gộp trùng với dữ liệu đã có" như thế nào?
4/ Áp dụng điều kiện tử động nhập dữ liệu ở các cột sau?? => là sao?
5/ giải thích lại hàng 35 và 36 trong file "IT fee Summary.xlsx" sheet"Data" lại rõ ràng hơn
Bài đã được tự động gộp:

Vì đây là "Bài tập lớn" nhiều vấn đề nên tôi sẽ hướng dẫn bạn làm từng phần:
1/ bạn dùng FSO để duyệt từng file trong thương mục.
2/ Ứng với từng file => bạn sẽ lấy dc "yyyy" và IT Service trong tên file
3/ Ứng với từng file => bạn tìm trong từng Sheet có cell nào value là "DAC" không? nếu có thì tại cột của cell đó=> tim từ trên xuống giá trị "046016" và tương ứng hàng đó lấy các giá trị mong muốn ở nơi mong muốn như phương thức tìm cột "DAC" vậy.
vấn đề ở đây là " không được gộp trùng với dữ liệu đã có" như thế nào??? tôi chưa rõ.
 
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
Tôi sẽ hỗ trợ từng phần cho bạn bằng những Sub / Function.
Trước hết là lấy tên file trong folder (để bạn duyệt từng file mà lấy dữ liệu)
Mã:
Function ArrayListFileInFolder(ByVal strPathFolder As String)
Dim objFSO As Object, objFolder As Object, objFile As Object, Dic As Object
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
        Set objFolder = objFSO.GetFolder(strPathFolder) 'Get the folder object
    On Error GoTo 0
    If objFolder Is Nothing Then
        MsgBox "Location of Folder is NOT correct !!!", vbCritical, "--:: ALARM ::--"
        Exit Function
    End If
    Set Dic = CreateObject("Scripting.Dictionary")
    For Each objFile In objFolder.Files
        If Not Dic.Exists(objFile.Name) Then Dic.Add objFile.Name, ""
    Next objFile
    ArrayListFileInFolder = Dic.Keys
    Set objFSO = Nothing
    Set objFolder = Nothing
    Set objFile = Nothing
    Set Dic = Nothing
End Function
 

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
Ứng với mỗi WorkBook được mở trong folder, bạn sẽ tìm các cột dữ liệu cần lấy :
Mã:
Public wsGetData As Worksheet
Public iColumn As Long

Function FindColumn(ByVal wbWorkbook As Workbook, ByVal vWhatFind) As Boolean
Dim rngRangeFind As Range, cllResultFind As Range
Dim Sht As Worksheet
    FindColumn = False
    Set wsGetData = Nothing
    iColumn = 0
    For Each Sht In wbWorkbook.Worksheets
        Set rngRangeFind = Sht.UsedRange
        If Not rngRangeFind Is Nothing Then
            With rngRangeFind
                Set cllResultFind = .Find(What:=vWhatFind, _
                                            After:=.Cells(.Cells.Count), _
                                            LookIn:=xlValues, _
                                            LookAt:=xlWhole, _
                                            SearchOrder:=xlByRows, _
                                            SearchDirection:=xlNext, _
                                            MatchCase:=False)
                If Not cllResultFind Is Nothing Then
                    FindColumn = True
                    Set wsGetData = Sht
                    iColumn = cllResultFind.Column
                    GoTo ExitFunction
                End If
            End With
        End If
    Next Sht
   
ExitFunction:
    Set rngRangeFind = Nothing
    Set rngRangeFind = Nothing
End Function
Sheet và column cột cần tìm dc để vào biến wsGetData và iColumn
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
10,359
Được thích
12,634
Điểm
1,560
Đã nói rồi. Chịu khó học PowerQuery thì sec giải quyết được phần lớn các công việc gộp files, chuyển và lọc dữ liệu.

Một khi đã thuần thục rồi thì sẽ thấy những công việc này VBA không nhanh và gọn bằng đâu.
 

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
Đã nói rồi. Chịu khó học PowerQuery thì sec giải quyết được phần lớn các công việc gộp files, chuyển và lọc dữ liệu.

Một khi đã thuần thục rồi thì sẽ thấy những công việc này VBA không nhanh và gọn bằng đâu.
mà bạn ý giờ chưa có biết thì... chữa cháy bằng mấy cái lẻ tẻ này...
hic... em cũng đang học Power Query nữa đây nè bác ơi...
 

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 với mỗi WorkBook được mở trong folder, bạn sẽ tìm các cột dữ liệu cần lấy :
Mã:
Public wsGetData As Worksheet
Public iColumn As Long

Function FindColumn(ByVal wbWorkbook As Workbook, ByVal vWhatFind) As Boolean
Dim rngRangeFind As Range, cllResultFind As Range
Dim Sht As Worksheet
    FindColumn = False
    Set wsGetData = Nothing
    iColumn = 0
    For Each Sht In wbWorkbook.Worksheets
        Set rngRangeFind = Sht.UsedRange
        If Not rngRangeFind Is Nothing Then
            With rngRangeFind
                Set cllResultFind = .Find(What:=vWhatFind, _
                                            After:=.Cells(.Cells.Count), _
                                            LookIn:=xlValues, _
                                            LookAt:=xlWhole, _
                                            SearchOrder:=xlByRows, _
                                            SearchDirection:=xlNext, _
                                            MatchCase:=False)
                If Not cllResultFind Is Nothing Then
                    FindColumn = True
                    Set wsGetData = Sht
                    iColumn = cllResultFind.Column
                    GoTo ExitFunction
                End If
            End With
        End If
    Next Sht
 
ExitFunction:
    Set rngRangeFind = Nothing
    Set rngRangeFind = Nothing
End Function
Sheet và column cột cần tìm dc để vào biến wsGetData và iColumn
Bạn chỉ như thế này thì chủ thớt chịu chết thôi. Để xem tôi nói có sai không?

Tiện thể hỏi chủ thớt: cái cost2 và cost3 là thế nào? Tôi đọc mấy lần rồi tẩu hỏa nhập ma luôn. Rồi trong sheet staff có cái/loại/cột nào gọi là IT service? _)()(- :wallbash:
 
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
Bạn chỉ như thế này thì chủ thớt chịu chết thôi. Để xem tôi nói có sai không?

Tiện thể hỏi chủ thớt: cái cost2 và cost3 là thế nào? Tôi đọc mấy lần rồi tẩu hỏa nhập ma luôn _)()(- :wallbash:
nếu bạn í biết về VBA và cố gắng thì OK không thì chịu chết thiệt ah.... => tùy vào bạn í
mình cũng giống bạn: "cái cost2 và cost3" là cái chi rứa mà đọc hoài không hiểu!!!
 

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
Cho mình hỏi:
1/ tên file là có format giống nhau hết như các file đính kèm đã gỏi?
4 ký tự đầu luôn là năm?
như "2005 MR-001 (Autodesk Software).xlsx" => có format là: yyyy **** (****)? =>lấy phần trong ngoặc?
hoặc như "2005 Exxchenge Online Plan2.xlsx" => có format là: yyyy **** => lấy toàn bộ ****?
2/ trong "2005 MR-020 (Office 365 MS Project).xlsx" =>User Name / ID ở đâu?
3/ giải quyết vấn đề "không được gộp trùng với dữ liệu đã có" như thế nào?
4/ Áp dụng điều kiện tử động nhập dữ liệu ở các cột sau?? => là sao?
5/ giải thích lại hàng 35 và 36 trong file "IT fee Summary.xlsx" sheet"Data" lại rõ ràng hơn
Mình trả lời như sau nhé

1/ Tên file có format đều có 4 ký tự đầu là số + chữ
. Như file "2005 MR-001 (Autodesk Software).xlsx" => có 4 ký tự đầu là 2005 + ***
=> Lấy 4 ký tự đầu cho cột [Date] ở file tổng ( thực ra 4 ký tự đầu nghĩa là tháng 5 năm 2020 không phải năm)
=> Lấy " Autodesk Software" cho cột [ IT Service] ở file tổng.

. Như file "2005 Exxchenge Online Plan2.xlsx" => có 4 ký đầu là 2005 + ***
=> Lấy 4 ký tự đầu cho cột [Date] ở file tổng
=> Lấy "Exxchenge Online Plan2" cho cột [ IT Service] ở file tổng

. Như file "2005 IT Fee.xlsx" => có 4 ký tự đầu là 2005 *** => có 4 ký đầu là 2005 + ***
=> Lấy 4 ký tự đầu cho cột [Date] ở file tổng
=> Lấy "IT fee" cho cột [ IT Service] ở file tổng.

===> Nhìn 3 file trên thì thấy các file có format tên không hoàn toàn giống nhau. chỉ giống ở 4 ký tự đầu là số. Các ký tự còn lại đều là chữ nhưng có file có dấu ngoặc có file không có dấu ngoặc vd như "2005 MR-001 (Autodesk Software).xlsx" và "2005 Exxchenge Online Plan2.xlsx" . Có file sau 4 ký tự đầu là số thì ký tự sau nó là giá trị cần lấy cho cột [IT Service] lun vd như file "2005 Exxchenge Online Plan2.xlsx" . Có file lại lấy trong dấu ngoặc vd như "2005 MR-001 (Autodesk Software).xlsx". Nếu khó code quá thì có thể tự đặt tên cho các file trước cho chung một format ( 4 ký tự đầu là số + ký tự sau là chữ). Với mỗi tên file, ta sẽ lấy được 4 ký tự đầu là số cho cột [Date] và ký tự còn lại là chữ cho cột [IT Service] trong file chung.

2/ trong "2005 MR-020 (Office 365 MS Project).xlsx" =>User Name / ID ở đâu?
=> Xin lỗi bạn. Kiểm tra lại mới không có.hihi. Nếu không có cột [User Name] trong file thì mình lấy giá trị cột nhưng chỉ lấy giá trị ở trước @xxx làm giá trị cho cột [User Name/ ID] ở file tổng.

Vd: arai.noriyuki@bc thì ta chỉ lấy arai.noriyuk
3/ giải quyết vấn đề "không được gộp trùng với dữ liệu đã có" như thế nào?
=> Nghĩa là mỗi lần mình copy về 1 file chung rồi thì có chạy code lần nửa nó cũng không chạy. Vì nó sẽ kiểm tra điều kiện mỗi dòng với các dữ liệu tương ứng chỉ xuất hiện một lần.
Vd: không thể cùng 1 tháng 2005 mà xuất hiện 2 dòng sau
2005​
046016Exxchenge Online Plan2loi.dangvanloi.dangvan@bc
2005​
046016Exxchenge Online Plan2loi.dangvanloi.dangvan@bc

Và ở những lần copy ở tháng sau thì dữ liệu tháng sau phải được paste ở dòng cuối của tháng trước. Không được ghi đè dữ liệu của tháng trước
Vd: dữ liệu tháng sau 2006 phải nằm ở dòng cuối cùng như sau.

2005​
046016Exxchenge Online Plan2loi.dangvanloi.dangvan@bc
2005​
046016IT feeLE.LETHANHLE.LETHANH@bc
2005​
046016IT feeALEX.DINGALEX.DING@bc
2005​
046016Autodesk SoftwarePC12744LE.LETHANH@bc
2005​
046016Autodesk SoftwarePC12612ly.nguyenhuu@bc
2005​
046016Autodesk SoftwarePC12759nghia.tranducdai@bcd
2005​
046016McAfeeEE User Registrationhuu.hoangtuanhuu.hoangtuan@bcd
2005​
046016McAfeeEE User Registrationduyen.nguyenthimaiduyen.nguyenthimai@bcd
2005​
046016McAfeeEE User Registrationcuong.vovietcuong.voviet@bcd
2005​
046016McAfeeEE User Registrationthom.tranthanhthom.tranthanh@bcd
2005​
046016Office 365 MS Projectmichael.kilgariffmichael.kilgariff@bc
2005​
046016Office 365 MS Projectarai.noriyukiarai.noriyuki@bc
2006
046016Exxchenge Online Plan2loi.dangvanloi.dangvan@bc

4/ Áp dụng điều kiện tự động nhập dữ liệu ở các cột sau?? => là sao?
5/ giải thích lại hàng 35 và 36 trong file "IT fee Summary.xlsx" sheet"Data" lại rõ ràng hơn
=> Cái này nghĩa là sau khi dữ liệu được gộp về 1 file chung thì
. Giá trị ở cột [cost2] sẽ tự lấy giá trị dựa vào phép so sánh sau.
Nếu dữ liệu lấy về ở cột {User name/ID] khớp với giá trị ở cột [User name] ở sheet "Staff" thì sẽ trả về giá trị ở cột [Unit Price].
. Giá trị ở cột [Cost3], thì ngược lại nếu dữ liệu ở cột {User name/ID] không khớp với giá trị ở cột [User name] ở sheet "Staff" thì sẽ trả về giá trị ở cột [Unit Price]

Cái này nếu khó quá mình tự viết hàm riêng cũng được. hihi
 
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 trả lời như sau nhé

3/ giải quyết vấn đề "không được gộp trùng với dữ liệu đã có" như thế nào?
=> Nghĩa là mỗi lần mình copy về 1 file chung rồi thì có chạy code lần nửa nó cũng không chạy. Vì nó sẽ kiểm tra điều kiện mỗi dòng với các dữ liệu tương ứng chỉ xuất hiện một lần.
Vd: không thể cùng 1 tháng 2005 mà xuất hiện 2 dòng sau

2005​
046016Exxchenge Online Plan2loi.dangvanloi.dangvan@bc



4/ Áp dụng điều kiện tự động nhập dữ liệu ở các cột sau?? => là sao?
5/ giải thích lại hàng 35 và 36 trong file "IT fee Summary.xlsx" sheet"Data" lại rõ ràng hơn
=> Cái này nghĩa là sau khi dữ liệu được gộp về 1 file chung thì
. Giá trị ở cột [cost2] sẽ tự lấy giá trị dựa vào phép so sánh sau.
Nếu dữ liệu lấy về ở cột {User name/ID] khớp với giá trị ở cột [User name] ở sheet "Staff" thì sẽ trả về giá trị ở cột [Unit Price].
. Giá trị ở cột [Cost3], thì ngược lại nếu dữ liệu ở cột {User name/ID] không khớp với giá trị ở cột [User name] ở sheet "Staff" thì sẽ trả về giá trị ở cột [Unit Price]

Cái này nếu khó quá mình tự viết hàm riêng cũng được. hihi
Vấn đề 3/ vì không có tháng thì làm sao biết là trùng?? hay là 1 năm chỉ làm dúng 1 lần như thế????
vấn đề 4/ chưa trả lời.
vấn đề 5/ => cho minh họa để hiểu
 

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
Vấn đề 3/ vì không có tháng thì làm sao biết là trùng?? hay là 1 năm chỉ làm dúng 1 lần như thế????
vấn đề 4/ chưa trả lời.
vấn đề 5/ => cho minh họa để hiểu
Mình trả lời như sau nhé

Vấn đề 3/ vì không có tháng thì làm sao biết là trùng?? hay là 1 năm chỉ làm dúng 1 lần như thế????
=> Tháng là cột [Date] trong file tổng được lấy về dựa trên tên file cần gộp đó bạn. vd : file "2005 Exxchenge Online Plan2.xlsx" thì lấy 2005 cho giá trị ở cột [Date].
vd tháng 5 HQ gửi tất cả các file có tên bắt đầu đều là "2005 ****". Khi chạy code lần 1 trỏ tới các file tháng 5 thì nó sẽ ra tất cả dữ liệu các file của tháng đó vào file tổng. Nếu vô tình bấm chạy lần nửa cũng trỏ tới các file tháng 5 thì ở file tổng nó sẽ so sánh nếu dữ liệu đã tồn tại rồi thì không đỗ về nửa ak bác.
vd không thể xuất hiện 2 dòng giống nhau như sau
2005​
046016Exxchenge Online Plan2loi.dangvanloi.dangvan@bc
2005​
046016Exxchenge Online Plan2loi.dangvanloi.dangvan@bc

vấn đề 4/ chưa trả lời.
vấn đề 5/ => cho minh họa để hiểu
=> 2 vấn đề này là 1 ah bạn
Nghĩa là giả sử 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ì cột [cost2] sẽ trả về giá trị ở cột [Unit Price], nếu không có thì giá trị cột [cost2] để trống
Nếu không có thì cột [cost3] sẽ trả về giá trị ở cột [Unit Price], nếu có thì giá trị cột [cost3] để trống.

Mà yêu cầu này khó quá thì bỏ qua cũng được.. chỉ cần làm được các yêu cầu trên là tốt rồi. Là gộp các dữ liệu ( có điều kiện) ở các file thành 1 sheet ở file tổng là quá OK rồi...
 
Lần chỉnh sửa cuối:

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
10,359
Được thích
12,634
Điểm
1,560
Muốn làm code VBA bài này thì viết một đoạn code làm 4 việc sau đây:
1. công việc thứ nhất, lấy một danh sách files cần gộp.
2. công việc thứ hai, chép tất cả các file vào một sheet của file chủ. Muốn dùng copy/paste, copy/paste qua array, hay ADO cũng được.
3. dùng ADO, lọc sheet mới này, chép vào mọt sheet khác
4. delete sheet cũ, hay để nó làm tham khảo càng tốt.

Chớ ham gom vào một lượt (bớt số công đoạn).
Lý do dùng phường pháp rườm rà này là phân biệt từng công đoạn để dễ kiểm soát và sửa đổi yêu cầu sau này.
 

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
Muốn làm code VBA bài này thì viết một đoạn code làm 4 việc sau đây:
1. công việc thứ nhất, lấy một danh sách files cần gộp.
2. công việc thứ hai, chép tất cả các file vào một sheet của file chủ. Muốn dùng copy/paste, copy/paste qua array, hay ADO cũng được.
3. dùng ADO, lọc sheet mới này, chép vào mọt sheet khác
4. delete sheet cũ, hay để nó làm tham khảo càng tốt.

Chớ ham gom vào một lượt (bớt số công đoạn).
Lý do dùng phường pháp rườm rà này là phân biệt từng công đoạn để dễ kiểm soát và sửa đổi yêu cầu sau này.
Khổ là định dạng mỗi sheet (có data cần gộp) ở mỗi file khác nhau nên em nghĩ chép vào cùng 1 sheet thì e là bất tiện thì phải
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
10,359
Được thích
12,634
Điểm
1,560
Khổ là định dạng mỗi sheet (có data cần gộp) ở mỗi file khác nhau nên em nghĩ chép vào cùng 1 sheet thì e là bất tiện thì phải
Đó là tại sao phân ra tưng công đoạn càng tốt.
Trong công doạn 2, thêm code chuẩn hoá lại các bảng lấy ra từ các files trước khi copy xuống.
 

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
Đó là tại sao phân ra tưng công đoạn càng tốt.
Trong công doạn 2, thêm code chuẩn hoá lại các bảng lấy ra từ các files trước khi copy xuống.
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-
 
Top Bottom