(Cần giúp đỡ) Cần hướng dẫn viết Code VBA để tham chiếu dữ liệu giữa hai file (thay thế hàm vlookup)

Liên hệ QC

cafephutho

Thành viên mới
Tham gia
13/12/08
Bài viết
9
Được thích
0
Thân gửi các Anh em
Mình có 2 file này cần map dữ liệu thông tin của cột D (PHAN KHUC) của file Du lieu KH sang cột C (PHANKHUC) của file Du lieu can Map
- Trước đây mình hay dùng hàm vlookup nhưng giờ với dữ liệu record ngày càng nhiều, thêm số lượng các trường thông tin nhiều (mình đã xóa bớt trường thông tin để file đỡ nặng) thì dùng vlookup là không ổn dẫn tới treo mày luôn
- Do đó, các Anh em hướng dẫn mình viết code VBA để thay thế hàm vlookup nhằm điền được thông tin PHANKHUC khách hàng trong file Du lieu can Map từ file CSDL Du lieu KH
Cảm ơn các bạn nhiều
Thân mến
 

File đính kèm

  • Du lieu can Map.xlsx
    43.1 KB · Đọc: 21
  • Du lieu KH.xlsb
    45.7 KB · Đọc: 20
Lần chỉnh sửa cuối:
Rất mong các cao thủ giúp đỡ
 
Đợi chờ .........................................
 
Thân gửi các Anh em cao thủ thiện lành
Mình có 2 file này cần map dữ liệu thông tin của cột D (PHAN KHUC) của file Du lieu KH sang cột C (PHANKHUC) của file Du lieu can Map
- Trước đây mình hay dùng hàm vlookup nhưng giờ với dữ liệu record ngày càng nhiều, thêm số lượng các trường thông tin nhiều (mình đã xóa bớt trường thông tin để file đỡ nặng) thì dùng vlookup là không ổn dẫn tới treo mày luôn
- Do đó, các cao thủ hướng dẫn mình viết code VBA để thay thế hàm vlookup nhằm điền được thông tin PHANKHUC khách hàng trong file Du lieu can Map từ file CSDL Du lieu KH
Cảm ơn các bạn nhiều
Thân mến
Góp ý cho bạn:
1/ Tiêu đề nên sửa là Dựa vào Mã KH tra phân khúc giữa 2 File (giống như dùng hàm VLOOKUP), nội dung cần nêu rỏ tra cột nào của File nào sang cột nào của File nào.
2/ Nên để dữ liệu khách hàng trong 1 File thì dễ viết code hơn.
3/ Nên xóa câu này đi vì thừa thải không cần thiết và làm mất đi thâm tình "Thân gửi các Anh em cao thủ thiện lành". Diễn đàn chẳng ai tự nhận mình là cao thủ cả, chỉ có người biết giúp người chưa biết.
 
CUS_ID ở "Du lieu can map" nó là gì ở bên "Du lieu KH"? Là MaKH? Hỏi vì có những CUS_ID = 0 (MaKH = 0???), hoặc nhỏ thó 89 trong khi bên MaKH toàn số khủng.

Theo tôi cứ For + đít to mà chơi. Lấy dữ liệu trong sự kiện Workbook_Open của "Du lieu can map" bằng ADO hoặc mở "Du lieu KH" -> đọc dữ liệu -> đóng "Du lieu KH". Nhiều người cứ buộc phải không mở tập tin nhưng bạn cứ mở cũng chả sao.

Nếu CUS_ID là Ma KH thì tham khảo:

1. Mở "Du lieu can map" -> Alt + F11 -> đúp chuột vào ThisWorkbook -> dán code
Mã:
Private Sub Workbook_Open()
    read_data
End Sub

2. Menu Insert -> Module -> dán code sau vào Module rồi lưu tập tin thành "Du lieu can map.xlsm"
Mã:
Sub read_data()
Dim lastRow As Long, r As Long, text As String, data(), dic As Object, wb As Workbook
    On Error Resume Next
'    mo Du lieu KH
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\Du lieu KH.xlsb")
'    co truc trac, vd. khong co tap tin Du lieu KH, thi ket thuc
    If Err.Number Then Exit Sub
    On Error GoTo 0
    With wb.Worksheets("KHACHHANG_T11")
        lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
'        doc du lieu nguon
        If lastRow > 1 Then data = .Range("A2:D" & lastRow).Value
        wb.Close
    End With
'    khong co du lieu nguon thi ket thuc
    If lastRow = 1 Then Exit Sub
    lastRow = ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp)
'    khong co du lieu dich thi ket thuc
    If lastRow = 1 Then Exit Sub
   
    Application.ScreenUpdating = False
    
    Set dic = CreateObject("Scripting.Dictionary")
    For r = 1 To UBound(data)
        text = CStr(data(r, 1))
        If Not dic.exists(text) Then dic.Add text, data(r, 4)
    Next r
    data = ThisWorkbook.Worksheets("Sheet1").Range("A2:A" & lastRow + 1).Value
    For r = 1 To UBound(data) - 1
        text = data(r, 1)
        If Len(text) Then
            If dic.exists(text) Then
                data(r, 1) = dic.Item(text)
            Else
                data(r, 1) = Empty
            End If
        End If
    Next r
    ThisWorkbook.Worksheets("Sheet1").Range("C2").Resize(UBound(data)).Value = data
   
    Set dic = Nothing

    Application.ScreenUpdating = True
End Sub
 
Góp ý cho bạn:
1/ Tiêu đề nên sửa là Dựa vào Mã KH tra phân khúc giữa 2 File (giống như dùng hàm VLOOKUP), nội dung cần nêu rỏ tra cột nào của File nào sang cột nào của File nào.
2/ Nên để dữ liệu khách hàng trong 1 File thì dễ viết code hơn.
3/ Nên xóa câu này đi vì thừa thải không cần thiết và làm mất đi thâm tình "Thân gửi các Anh em cao thủ thiện lành". Diễn đàn chẳng ai tự nhận mình là cao thủ cả, chỉ có người biết giúp người chưa biết.

Mình sửa câu từ rồi ạ
 
Cao thủ thì bạn cứ đợi nhé.Vì các bác trong này không thích vậy.Mà sao bạn không cho vào 1 file.để 2 File làm gì.
Trên thực tế thì 2 file này rất nặng vì số lượng bản ghi (record) lên tới hơn 500 ngàn dòng, chả qua mình đẩy lên đây hỏi anh em nên xóa chỉ để ít bản ghi. Chứ thực tế file nặng thì làm sao copy vào chung 1 file được
 
Web KT
Back
Top Bottom