Xử lý dữ liệu excel bằng lập trình VBA (1 người xem)

  • Thread starter Thread starter hoahayhy
  • Ngày gửi Ngày gửi

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

hoahayhy

Thành viên mới
Tham gia
7/8/14
Bài viết
7
Được thích
1
Gộp dữ liệu 2 file excel vào 1 file excel

Chào các anh chị trong diễn đàn.
Em có một vấn đề mong mọi người giúp đỡ.
- Em có 2 file excel trong 1 folder em muốn tạo ra một file excel mới.
File đó có Sheet1 chứa File excel 1, Sheet2 chứa File excel 2.
- Sheet3 em muốn tổng hợp dữ liệu từ 2 file (hoặc 2 Sheet đã được copy sang).
TH1. Nếu Trạng thái là đã đọc thì kết quả là đã đọc (Đã đọc + Chưa đoc= Đã đọc) và có cột mới báo OK.
TH2. Nếu trạng thái là chưa đọc thì kết quả là chưa đọc và có cột mới là NOT
- File chứa code VBA là file riêng. Nó chỉ cần có 1 nút buttun để ấn chạy + Code nữa.hihi
Khi nhấn buttun thì nó tạo ra 1 file mới và xử lý như trên ạ.
Em đính kèm file dưới.
Mong mọi ngườ giúp đỡ.
Em xin cảm ơn mọi người nhiều.
 

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn bạn đã nhắc nhở.hihi.
Sao mình không thấy nút sửa đề tài nhỉ.
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các anh chị trong diễn đàn.
Em có một vấn đề mong mọi người giúp đỡ.
- Em có 2 file excel trong 1 folder em muốn tạo ra một file excel mới.
File đó có Sheet1 chứa File excel 1, Sheet2 chứa File excel 2.
- Sheet3 em muốn tổng hợp dữ liệu từ 2 file (hoặc 2 Sheet đã được copy sang).
TH1. Nếu Trạng thái là đã đọc thì kết quả là đã đọc (Đã đọc + Chưa đoc= Đã đọc) và có cột mới báo OK.
TH2. Nếu trạng thái là chưa đọc thì kết quả là chưa đọc và có cột mới là NOT
- File chứa code VBA là file riêng. Nó chỉ cần có 1 nút buttun để ấn chạy + Code nữa.hihi
Khi nhấn buttun thì nó tạo ra 1 file mới và xử lý như trên ạ.
Em đính kèm file dưới.
Mong mọi ngườ giúp đỡ.
Em xin cảm ơn mọi người nhiều.
Biết là bạn mới tham gia nên ráng cứu bạn phần nào
1. Copy code này cho vào 1 file excel mới nào tùy ý
2. Copy file có code này và lưu chung với 2 file kia.
3. Chạy code xem kết quả.
Lưu ý:
File chỉ lấy dữ liệu từ 2 file kia về 2 sheet mới cho bạn
Vì chẳng biết bạn cần gì và vì dữ liệu có tẹo nên chẳng giúp nốt cho bạn
Code liên quan đến tên sheet trong từng file và định dạng từng file. Nếu thay đổi chi tiết nào thì phải sửa code
PHP:
Sub Main()
Dim ObjConn As Object, RS As Object, Files
Dim StrRequest As String, Path As String
Dim I as Long, It, n as Long, tieude()
Path = ThisWorkbook.Path
Files = Array("QS_MAIL_HISTORY_SMS.xls", "QS_MAIL_HISTORY_EMAIL.xls")
Set RS = CreateObject("ADODB.Recordset")
Workbooks.Add
    For I = 0 To UBound(Files)
        Set ObjConn = GetExcelConnection(Path & "\" & Files(I), 1)
        StrRequest = "SELECT * FROM [Worksheet$A1:AE10000]"
        RS.Open StrRequest, ObjConn, 3, 1
        For Each It In RS.Fields
            n = n + 1
            ReDim Preserve tieude(1 To n)
            tieude(n) = It.Name
        Next
        ActiveWorkbook.Sheets("Sheet" & I + 1).[A1].Resize(, n) = tieude
        ActiveWorkbook.Sheets("Sheet" & I + 1).[A2].CopyFromRecordset RS
        ObjConn.Close
        n = 0: Erase tieude
    Next
    Set RS = Nothing
End Sub
Function GetExcelConnection(ByVal Path As String, Optional ByVal Header As Boolean = True)
    Dim StrConn As String, ObjConn As Object, Pro As String, Ext As String
    Set ObjConn = CreateObject("ADODB.Connection")
    If Application.Version < 12 Then
        Pro = "Provider=Microsoft.JET.OLEDB.4.0;"
        Ext = ";Extended Properties=""Excel 8.0;"
    Else
        Pro = "Provider=Microsoft.ACE.OLEDB.12.0;"
        Ext = ";Extended Properties=""Excel 12.0;"
    End If
    StrConn = Pro & "Data Source=" & Path & Ext & "HDR=" & IIf(Header, "Yes", "No") & ";IMEX=1"";"
    ObjConn.Open StrConn
    Set GetExcelConnection = ObjConn
End Function
 
Upvote 0
Em cảm ơn anh nhiều.
Anh ơi đây là đoạn code xử lý lần trước có bạn hỏi anh và anh đã trả lời rồi ạ.
Bây giờ em muốn đưa dữ liệu xử lý được này vào Sheet3 được không ạ.
Anh giúp em mới ạ.
Em cảm ơn anh nhiều.
PHP:
Sub XuLy()
Dim data(), Res(), I, J, k, Tmp, X
With Sheet1    data = .Range(.[A1], .[AE65536].End(3)).Value    
ReDim Res(1 To UBound(data), 1 To 31)
End With
With CreateObject("scripting.dictionary")    
For I = 1 To UBound(data)        
Tmp = data(I, 1) & data(I, 2) & data(I, 3)       
 If Not .exists(Tmp) Then          
  k = k + 1            .Add Tmp, k         
   For J = 1 To 31                
Res(k, J) = data(I, J)           
 Next        Else            
X = .Item(Tmp)           
 If Res(X, 25) <> data(I, 25) Then               
 If data(I, 26) <> "" Then                   

 Res(X, 25) = data(I, 25)                 
   Res(X, 26) = data(I, 26)                   
  Res(X, 22) = data(I, 22)                
End If           
 End If        
End If   
 Next
End With
Sheet1.[A1].Resize(I - 1, 31) = ResEnd Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Em cảm ơn anh nhiều.
Anh ơi đây là đoạn code xử lý lần trước có bạn hỏi anh và anh đã trả lời rồi ạ.
Bây giờ em muốn đưa dữ liệu xử lý được này vào Sheet3 được không ạ.
Anh giúp em mới ạ.
Em cảm ơn anh nhiều.
Nhìn cách bạn sửa code là mình biết bạn rất có khả năng học code.
Bạn xem file rồi từ từ nghiên cứu nha.
Chú ý nếu tên bị trùng thì dữ liệu sai ráng chịu
Và cột báo thời gian đọc không giống như file mẫu cũng ráng chịu nha
Giao trước là không gọi tên mình để sửa code nha. Chạy thôi!
 

File đính kèm

Upvote 0
Nhìn cách bạn sửa code là mình biết bạn rất có khả năng học code.
Bạn xem file rồi từ từ nghiên cứu nha.
Chú ý nếu tên bị trùng thì dữ liệu sai ráng chịu
Và cột báo thời gian đọc không giống như file mẫu cũng ráng chịu nha
Giao trước là không gọi tên mình để sửa code nha. Chạy thôi!

Anh Vui tính nhỉ.hihi.
Code anh em phải gọi anh chứ.hehe.
Anh ơi cho em hỏi nốt cái này là nếu mà em muốn đọc folder của thư mục đang chứa 2 file cần xử lý với tên là
QS_MAIL_HISTORY_20140807_093314 và QS_MAIL_HISTORY_20140807_093342
Em muốn đọc 2 file nào có tên dạng QS_MAIL_HISTORY_*****.xls thì làm thế nào ạ.
Nếu theo code dưới cứ mỗi lần có file mới khác tên thì lại thay đổi ạ.
Em cảm ơn anh nhiều.
PHP:
Path = ThisWorkbook.Path
Files = Array("SMS.xls", "EMAIL.xls")Set RS = CreateObject("ADODB.Recordset")
Workbooks.Add
 
Upvote 0
Anh Vui tính nhỉ.hihi.
Code anh em phải gọi anh chứ.hehe.
Anh ơi cho em hỏi nốt cái này là nếu mà em muốn đọc folder của thư mục đang chứa 2 file cần xử lý với tên là
QS_MAIL_HISTORY_20140807_093314 và QS_MAIL_HISTORY_20140807_093342
Em muốn đọc 2 file nào có tên dạng QS_MAIL_HISTORY_*****.xls thì làm thế nào ạ.
Nếu theo code dưới cứ mỗi lần có file mới khác tên thì lại thay đổi ạ.
Em cảm ơn anh nhiều.
PHP:
Path = ThisWorkbook.Path
Files = Array("SMS.xls", "EMAIL.xls")Set RS = CreateObject("ADODB.Recordset")
Workbooks.Add
Mình hướng dẫn thế này chắc bạn làm được.
Bên ngoài sheet có chứa cái nút bấm, tại ô A1 bạn nhập tên file1, tại A2 nhập tên file2
Sửa lại trong code 1 lần là xài luôn
PHP:
Path = ThisWorkbook.Path
Files = Array([A1], [A2])
Workbooks.Add
Thật ra viết code luôn cho tự động lấy tên file cũng không sao nhưng thôi vậy được rồi. Ngán lắm rồi
 
Upvote 0
Mình hướng dẫn thế này chắc bạn làm được.
Bên ngoài sheet có chứa cái nút bấm, tại ô A1 bạn nhập tên file1, tại A2 nhập tên file2
Sửa lại trong code 1 lần là xài luôn
PHP:
Path = ThisWorkbook.Path
Files = Array([A1], [A2])
Workbooks.Add
Thật ra viết code luôn cho tự động lấy tên file cũng không sao nhưng thôi vậy được rồi. Ngán lắm rồi

Anh cho em cách lấy tên file tự động được không ạ.
Lần sau nếu dùng em còn biết ạ.
Em cảm ơn anh ạ.hihi.
 
Upvote 0
Vâng.hihi.
Em cảm ơn anh nhiều.
Mong anh giúp đỡ nhiều hơn ạ.:D
 
Upvote 0

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

Back
Top Bottom