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 (1 người xem)

Liên hệ QC

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

quangtro

Thành viên mới
Tham gia
26/6/20
Bài viết
21
Được thích
0
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:
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.
 
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.
 
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.
 
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:
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:
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
 
Ứ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
 
Đã 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.
 
Đã 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...
 
Ứ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:
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!!!
 
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:
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
 
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:
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.
 
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
 
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.
 
Đó 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-
 
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

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.
 
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
 
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...
 
Đú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.
 
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:
Đú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ó.
 
- Đú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 à?
 
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

- 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.
 
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á !!!!
 
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.
 
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ả.
 
- 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á !!!!
 
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:
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!!!!
 
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:
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

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.:))
 
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

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...
Vẫn chưa đúng bạn ơi.
- Kết quả đúng phải giống như cột cost2_đúng, cost3_đúng trong đính kèm mà mình đã dùng hàm so sánh.
- Khi nhấn "Get List File" -< hiện File Dialog -> chọn folder chứa các file cần lấy dữ liệu> cho nhìn thấy và chọn file cần lấy dữ liệu lun được không
- Cái cost4 nghĩa là khi dữ liệu được lấy về. Ứng với mỗi dòng nếu tìm 2 dòng giống nhau thì cột cost4 ở dòng thứ 2 sẽ lấy giá trị cột " unit price" ở dòng tương ứng đó. Tương tự phát hiện 3 dòng thì cột cost4 ở dòng thứ 2 và 3 sẽ lấy giá trị cột " unit price" ở dòng tương ứng đó.
- Cái trùng hay không trùng là khi mình nhấn "Get List File" và "Collect Data" 1 lần rồi. Khi bấm và chọn file đó 1 lần nữa thì nó sẽ báo đã nhập về rồi nên không copy về nữa ( cái này không làm cũng được).
- Nếu được thì làm thêm 1 cái button code để xóa dữ liệu được đỗ về gần nhất.
 

File đính kèm

Vẫn chưa đúng bạn ơi.
- Kết quả đúng phải giống như cột cost2_đúng, cost3_đúng trong đính kèm mà mình đã dùng hàm so sánh.
bạn coi lại kỹ đi...
cái User / ID tối lấy theo yêu cầu đầu tiên là nếu có cột thì lấy theo cột, không thì lấy phần trước @ của địa chỉ mail mà???
nên mấy cái bạn thấy không đúng là tôi lấy trước @ của Email ah

- Cái cost4 nghĩa là khi dữ liệu được lấy về. Ứng với mỗi dòng nếu tìm 2 dòng giống nhau thì cột cost4 ở dòng thứ 2 sẽ lấy giá trị cột " unit price" ở dòng tương ứng đó. Tương tự phát hiện 3 dòng thì cột cost4 ở dòng thứ 2 và 3 sẽ lấy giá trị cột " unit price" ở dòng tương ứng đó.
- Cái trùng hay không trùng là khi mình nhấn "Get List File" và "Collect Data" 1 lần rồi. Khi bấm và chọn file đó 1 lần nữa thì nó sẽ báo đã nhập về rồi nên không copy về nữa ( cái này không làm cũng được).
Cái này này thì tôi không biết dc trừ phi bạn cho ví dụ minh họa rõ ráng mà thôi!!!

- Khi nhấn "Get List File" -> hiện File Dialog -> chọn folder chứa các file cần lấy dữ liệu> cho nhìn thấy và chọn file cần lấy dữ liệu lun được không
OK tôi đã chỉnh lại theo bạn muốn chọn file.
xem file đính kèm nha
 

File đính kèm

Lần chỉnh sửa cuối:
bạn coi lại kỹ đi...
cái User / ID tối lấy theo yêu cầu đầu tiên là nếu có cột thì lấy theo cột, không thì lấy phần trước @ của địa chỉ mail mà???
nên mấy cái bạn thấy không đúng là tôi lấy trước @ của Email ah
Mình không hiểu ý của bạn luôn. 2 người hiểu ý nhau thôi mà đã rắc rối rồi nhỉ.:)))
Mình không biết bạn lấy giá trị so sánh sao nhưng kết quả ra không đúng rồi.
- Nhưng chỉ xét cột user name/id sau khi lấy dữ liệu về để so sánh với sheet "staff" nhé. kết quả cột cost2,cost3 phải đúng như "cost2_đúng", "cost3_đúng" mới đúng nhé.
- Còn cột User name/ID mình có nói lấy dữ liệu giá trị cột User name ở các file con. Nếu file con nào không có cột "user name" thì lấy giá trị ở cột email. Nhưng chỉ lấy giá trị trước "@". vd : loi.dangvan@bc" thì chỉ lấy "loi.dangvan".
- Ngoài ra mình có thêm một cột " PC Name" ở file tổng để chứa giá trị PC name ở các file con ( nếu có).
Đính kèm là code của bạn Maika8008 mà mình đã tùy biến lại giá trị cần lấy. Bạn tham khảo nhé
 

File đính kèm

- Nhưng chỉ xét cột user name/id sau khi lấy dữ liệu về để so sánh với sheet "staff" nhé. kết quả cột cost2,cost3 phải đúng như "cost2_đúng", "cost3_đúng" mới đúng nhé.
- Còn cột User name/ID mình có nói lấy dữ liệu giá trị cột User name ở các file con. Nếu file con nào không có cột "user name" thì lấy giá trị ở cột email. Nhưng chỉ lấy giá trị trước "@". vd : loi.dangvan@bc" thì chỉ lấy "loi.dangvan".
bạn coi lại cột User / ID đi
2005046016Autodesk SoftwareVNM-SMJOPC116chung.phamanh@bcd
1,500​
1
1,500​
1,500​
trong sheet"Staff" bạn có gì là "VNM-SMJOPC116" này không???????????????
nó chỉ toàn là phần trước @ của mail thôi!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
và tôi không lấy "VNM-SMJOPC116" kiểm tra là lấy trước @ Email kiểm tra!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Bài đã được tự động gộp:

- Ngoài ra mình có thêm một cột " PC Name" ở file tổng để chứa giá trị PC name ở các file con ( nếu có).
Thiệt hết nói nỗi với bạn luôn... người ta làm đã đời tới giờ mới nói có thêm cột trong sheet "Data"...
thôi...tôi làm cho bạn cái khung rùi... bạn cứ tùy biến đi nha.
 
Lần chỉnh sửa cuối:
bạn coi lại cột User / ID đi
2005046016Autodesk SoftwareVNM-SMJOPC116chung.phamanh@bcd
1,500​
1
1,500​
1,500​
trong sheet"Staff" bạn có gì là "VNM-SMJOPC116" này không???????????????
nó chỉ toàn là phần trước @ của mail thôi!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
và tôi không lấy "VNM-SMJOPC116" kiểm tra là lấy trước @ Email kiểm tra!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Bạn ơi. bất đắc dĩ mình lấy "VNM-SMJOPC116" ở User name/ID là do file con "2005 MR-001 (Autodesk Software)" không có cột "user name" nên ban đầu mình kêu lấy tạm giá trị ở cột "PC Name" trong file "2005 MR-001 (Autodesk Software)". Sau này mình mới mới kêu lấy giá trị ở cột Email trong file "2005 MR-001 (Autodesk Software)" cho User name/ID ở file tổng nhưng chỉ lấy giá trị trước "@".

Nếu được bạn cho mình xin add zalo để mình nói rõ hơn chứ cứ viết qua lại 2 người không thật sự hiểu nhau để đạt kết quả đúng.
-trong sheet"Staff" bạn có gì là "VNM-SMJOPC116" này không???????????????
=> trong sheet "staff" không có "VNM-SMJOPC116 " thì khi so sánh với dữ liệu cột user name/id hiện tại thì cost2 để trống, cost3 lấy giá trị cột unit price.
 
Bạn ơi. bất đắc dĩ mình lấy "VNM-SMJOPC116" ở User name/ID là do file con "2005 MR-001 (Autodesk Software)" không có cột "user name" nên ban đầu mình kêu lấy tạm giá trị ở cột "PC Name" trong file "2005 MR-001 (Autodesk Software)". Sau này mình mới mới kêu lấy giá trị ở cột Email trong file "2005 MR-001 (Autodesk Software)" cho User name/ID ở file tổng nhưng chỉ lấy giá trị trước "@".

Nếu được bạn cho mình xin add zalo để mình nói rõ hơn chứ cứ viết qua lại 2 người không thật sự hiểu nhau để đạt kết quả đúng.
-trong sheet"Staff" bạn có gì là "VNM-SMJOPC116" này không???????????????
=> trong sheet "staff" không có "VNM-SMJOPC116 " thì khi so sánh với dữ liệu cột user name/id hiện tại thì cost2 để trống, cost3 lấy giá trị cột unit price.
tôi nói với bạn:
1/ sức người có hạn, bạn không thể lúc nói này lúc nói khác, có thêm cái này có thêm cái khác bất cứ lúc nào
2/ người làm code, mỗi lần chỉnh không phải lúc nào cũng đơn giản đâu!, nếu nó đụng tới cái "xương chính" thì coi như phải ngồi làm lại từ đầu.
3/ người giúp bạn không phải ai cũng rảnh mà theo bạn suốt đâu.
4/ tôi đã cố gắng theo bạn mà bạn lại "thật sự không rõ vấn đề của mình" mặt dù tôi đã hỏi kỹ đủ thứ... hỏi tới bạn nói là "hỏi thì nhiều mà code đâu không thấy!!!" ???? tôi hỏi để bạn rõ vấn đề của bạn mà bạn còn chưa dc nữa đây.

vì thế ... xin lỗi tôi không có thời gian mà đợi bạn thay cái này rùi đế cái khác nữa đâu nha.
Vì thế theo cái khung mà tôi làm cho bạn, bạn hãy tự "tùy biến" đi nhá!
Chào tạm biệt
 
tôi nói với bạn:
1/ sức người có hạn, bạn không thể lúc nói này lúc nói khác, có thêm cái này có thêm cái khác bất cứ lúc nào
2/ người làm code, mỗi lần chỉnh không phải lúc nào cũng đơn giản đâu!, nếu nó đụng tới cái "xương chính" thì coi như phải ngồi làm lại từ đầu.
3/ người giúp bạn không phải ai cũng rảnh mà theo bạn suốt đâu.
4/ tôi đã cố gắng theo bạn mà bạn lại "thật sự không rõ vấn đề của mình" mặt dù tôi đã hỏi kỹ đủ thứ... hỏi tới bạn nói là "hỏi thì nhiều mà code đâu không thấy!!!" ???? tôi hỏi để bạn rõ vấn đề của bạn mà bạn còn chưa dc nữa đây.

vì thế ... xin lỗi tôi không có thời gian mà đợi bạn thay cái này rùi đế cái khác nữa đâu nha.
Vì thế theo cái khung mà tôi làm cho bạn, bạn hãy tự "tùy biến" đi nhá!
Chào tạm biệt
Ok bạn. Dù sao cũng cảm ơn sự nhiệt tình của bạn.. Mình dùng code bạn Maika8008 cũng được rồi. chỉ lấy dữ liệu về sau đó dùng hàm so sánh với sheet "staff" để lấy giá trị cho cost2,cost3.
Mình thấy phần code "get list file" của bạn cũng khá hay mình sẽ tìm hiểu và kết hợp với code của bạn Maika8008 xem có hỗ trợ cho nhau được không. Chào bạn
 

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

Back
Top Bottom