Xin viết dùng mã vba thay thế cho hàm vlookup

Liên hệ QC
Sao mình dùng code nay nếu mã hành hóa lá chữ vd như A,B,C,D.. thì ok nhưng khi mã hàng là số thì khg dc. Mong các bác chỉ giáo. Mình khg lót file đc
Chuyển Key về dạng chuỗi, chỉnh lại tí tẹo
d.Add UCase(Vung(I, 1)), Array(Vung(I, 2), Vung(I, 3))
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d, I, Vung, Ws
    Set d = CreateObject("scripting.dictionary")
    Set Ws = Sheets("MA")
    Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 3)
        If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then
            If Target.Count = 1 Then
                For I = 1 To UBound(Vung)
                    d.Add UCase(Vung(I, 1)), Array(Vung(I, 2), Vung(I, 3))
                Next I
                    If d.exists(UCase(Target.Value)) Then
                        Target.Offset(, 1) = d.Item(UCase(Target.Value))(0)
                        Target.Offset(, 2) = d.Item(UCase(Target.Value))(1)
                    End If
            End If
         End If
End Sub
 
Mã nó đây
RightClick vào sheet "CT" ==> View Code chép cái này vào
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d, I, Vung, Ws
    Set d = CreateObject("scripting.dictionary")
    Set Ws = Sheets("MA")
    Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 3)
        If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then
            If Target.Count = 1 Then
                For I = 1 To UBound(Vung)
                    d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3))
                Next I
                    If d.exists(UCase(Target.Value)) Then
                        Target.Offset(, 1) = d.Item(UCase(Target.Value))(0)
                        Target.Offset(, 2) = d.Item(UCase(Target.Value))(1)
                    End If
            End If
         End If
End Sub
Thân
Xin hỏi các anh chị nếu tên sheet có dấu thì sửa code này thế nào ạ
 
Sửa file nguồn hả anh. hay sửa trong vba ạ. xin cảm ơn

Sửa tại dòng, chỗ chữ màu đỏ kìa bạn, sửa theo tên sheet không dấu mà bạn đặt ấy:
Set Ws = Sheets("MA")

Bạn sửa thành:
Set Ws = Sheets("Ngach_So")

--------

Cũng có nhiều cách như: Lấy theo tên sheet,lấy theo thứ tự sheet, lấy theo tên của đối tượng worksheet trong VBA.
Bạn tham khảo link:
https://www.giaiphapexcel.com/diendan/threads/bài-5-workbook-worksheet.130566/

--------

khổ nỗi tên sheet của em có dấu thì viết làm sao ạ

Nếu cứ nhất thiết phải đưa tên sheet có dấu ("ngạch sớ") vào code thì bạn sửa/ bổ sung các chỗ màu đỏ như sau:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim d, I, Vung, Ws
Dim tensheet As String
tensheet = "ng" & ChrW(7841) & "ch s" & ChrW(7899) 'ngạch sớ

Set d = CreateObject("scripting.dictionary")
Set Ws = Sheets(tensheet)
Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 3)
...
End Sub
 
Tôi không biết cách nào. Thua luôn.
Dạ xin cám ơn nhiều
Bài đã được tự động gộp:

Sửa tại dòng, chỗ chữ màu đỏ kìa bạn, sửa theo tên sheet không dấu mà bạn đặt ấy:
Set Ws = Sheets("MA")

Bạn sửa thành:
Set Ws = Sheets("Ngach_So")

--------

Cũng có nhiều cách như: Lấy theo tên sheet,lấy theo thứ tự sheet, lấy theo tên của đối tượng worksheet trong VBA.
Bạn tham khảo link:
https://www.giaiphapexcel.com/diendan/threads/bài-5-workbook-worksheet.130566/

--------



Nếu cứ nhất thiết phải đưa tên sheet có dấu ("ngạch sớ") vào code thì bạn sửa/ bổ sung các chỗ màu đỏ như sau:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim d, I, Vung, Ws
Dim tensheet As String
tensheet = "ng" & ChrW(7841) & "ch s" & ChrW(7899) 'ngạch sớ

Set d = CreateObject("scripting.dictionary")
Set Ws = Sheets(tensheet)
Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 3)
...
End Sub
xin bác cho code hoàn chỉnh ạ. xin cám ơn
 
Lần chỉnh sửa cuối:
xin bác cho code hoàn chỉnh ạ. xin cám ơn
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d, I, Vung, Ws
    Dim tensheet As String
    tensheet = "ng" & ChrW(7841) & "ch s" & ChrW(7899)
    Set d = CreateObject("scripting.dictionary")
    Set Ws = Sheets(tensheet)
    Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 3)
    If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then
        If Target.Count = 1 Then
            For I = 1 To UBound(Vung)
                d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3))
            Next I
                If d.exists(UCase(Target.Value)) Then
                    Target.Offset(, 1) = d.Item(UCase(Target.Value))(0)
                    Target.Offset(, 2) = d.Item(UCase(Target.Value))(1)
                End If
        End If
     End If
End Sub
 
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d, I, Vung, Ws
    Dim tensheet As String
    tensheet = "ng" & ChrW(7841) & "ch s" & ChrW(7899)
    Set d = CreateObject("scripting.dictionary")
    Set Ws = Sheets(tensheet)
    Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 3)
    If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then
        If Target.Count = 1 Then
            For I = 1 To UBound(Vung)
                d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3))
            Next I
                If d.exists(UCase(Target.Value)) Then
                    Target.Offset(, 1) = d.Item(UCase(Target.Value))(0)
                    Target.Offset(, 2) = d.Item(UCase(Target.Value))(1)
                End If
        End If
     End If
End Sub
Dạ xin cảm ơn nhưng nó vẫn báo lỗi ạ
 
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d, I, Vung, Ws
    Dim tensheet As String
    tensheet = "ng" & ChrW(7841) & "ch s" & ChrW(7899)
    Set d = CreateObject("scripting.dictionary")
    Set Ws = Sheets(tensheet)
    Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 3)
    If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then
        If Target.Count = 1 Then
            For I = 1 To UBound(Vung)
                d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3))
            Next I
                If d.exists(UCase(Target.Value)) Then
                    Target.Offset(, 1) = d.Item(UCase(Target.Value))(0)
                    Target.Offset(, 2) = d.Item(UCase(Target.Value))(1)
                End If
        End If
     End If
End Sub
Bỏ Dic được không bạn
 
Web KT
Back
Top Bottom