Code vlookup 2 chiều

Liên hệ QC

Duong.bach

Thành viên mới
Tham gia
28/3/20
Bài viết
34
Được thích
2
Các pro giúp em code vlookup 2 chiều với ô D1 và E1, source cột A và B với ạ. Như kiểu nhập D1 là 1 thì E1 trả 11 và nhập E1 là 12 thì D1 trả về e ý ạ.
Thanks all
 

File đính kèm

  • Untitled.png
    Untitled.png
    5.3 KB · Đọc: 40
@Duong.bach
Chuột phải vào sheet tab --> chọn view code --> dán code dưới đây
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim sArr
Dim i As Integer
sArr = Range("A1").CurrentRegion
If Target.Address = "$D$1" Then
    If Target <= 10 And Target >= 1 Then
        Range("F1") = sArr(Target, 2)
        Columns(5).Delete
    End If
End If
If Target.Address = "$E$1" Then
    If Target >= 11 And Target <= 20 Then
        Range("C1") = sArr(Target Mod 10, 1)
        Columns(4).Delete
        Columns(3).Insert
    End If
End If
End Sub
 
Upvote 0
@Duong.bach
Chuột phải vào sheet tab --> chọn view code --> dán code dưới đây
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim sArr
Dim i As Integer
sArr = Range("A1").CurrentRegion
If Target.Address = "$D$1" Then
    If Target <= 10 And Target >= 1 Then
        Range("F1") = sArr(Target, 2)
        Columns(5).Delete
    End If
End If
If Target.Address = "$E$1" Then
    If Target >= 11 And Target <= 20 Then
        Range("C1") = sArr(Target Mod 10, 1)
        Columns(4).Delete
        Columns(3).Insert
    End If
End If
End Sub
Thanks pro rất nhiều
Tiện bác cho em hỏi code em viết như này vấn đề ở đâu mà k chạy dc,viết đơn lẻ từng cái thì đúng mà
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$1" Then
x = Application.VLookup(Range("d1"), Range("a1:b10"), 2, 0)
Range("e1").Value = x
End If
If Target.Address = "$E$1" Then
Range("d1").Formula = "=INDEX(Sheet2!A1:A12,MATCH(Sheet2!E1,Sheet2!B1:B12,0))"
End If
End Sub
Bài đã được tự động gộp:

Cảm ơn pro rất nhiều
Tiện bác cho em hỏi code em viết như này vấn đề ở đâu mà k chạy dc,viết đơn lẻ từng cái thì đúng mà
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$1" Then
x = Application.VLookup(Range("d1"), Range("a1:b10"), 2, 0)
Range("e1").Value = x
End If
If Target.Address = "$E$1" Then
Range("d1").Formula = "=INDEX(Sheet2!A1:A12,MATCH(Sheet2!E1,Sheet2!B1:B12,0))"
End If
End Sub
Ôi bác ơi, ý em ko phải là cái source nó liên tiếp như thế, nó phải nó số bất kỳ cơ. bác có code nào tổng quát kiểu như theo cell ko
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn pro rất nhiều
Tiện bác cho em hỏi code em viết như này vấn đề ở đâu mà k chạy dc,viết đơn lẻ từng cái thì đúng mà
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$1" Then
x = Application.VLookup(Range("d1"), Range("a1:b10"), 2, 0)
Range("e1").Value = x
End If
If Target.Address = "$E$1" Then
Range("d1").Formula = "=INDEX(Sheet2!A1:A12,MATCH(Sheet2!E1,Sheet2!B1:B12,0))"
End If
End Sub
Bài đã được tự động gộp:


Ôi bác ơi, ý em ko phải là cái source nó liên tiếp như thế, nó phải nó số bất kỳ cơ. bác có code nào tổng quát kiểu như theo cell ko
Thử sửa lại thế này xem
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$D$1" Then
        Application.EnableEvents = False
        Range("e1").Value = Application.VLookup(Range("d1"), Range("a1:b10"), 2, 0)
        Application.EnableEvents = True
    End If
    If Target.Address = "$E$1" Then
        Application.EnableEvents = False
        Range("d1").Formula = "=INDEX(Sheet2!A1:A12,MATCH(Sheet2!E1,Sheet2!B1:B12,0))"
        Application.EnableEvents = True
    End If
End Sub
 
Upvote 0
Thử sửa lại thế này xem
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$D$1" Then
        Application.EnableEvents = False
        Range("e1").Value = Application.VLookup(Range("d1"), Range("a1:b10"), 2, 0)
        Application.EnableEvents = True
    End If
    If Target.Address = "$E$1" Then
        Application.EnableEvents = False
        Range("d1").Formula = "=INDEX(Sheet2!A1:A12,MATCH(Sheet2!E1,Sheet2!B1:B12,0))"
        Application.EnableEvents = True
    End If
End Sub
Thanks bác, cái này mới đúng mong muốn của em nè.
2 cái lệnh bác thêm vào nó có ý nghĩa như nào vậy ạ ? Nếu không có 2 lệnh đó thì code nó chạy dc đúng 1 lần
 
Upvote 0
Cảm ơn bác, cái này mới đúng mong muốn của em nè.
2 cái lệnh bác thêm vào nó có ý nghĩa như nào vậy ạ ?
Do cái sự kiện Worksheet_Change sẽ xảy ra khi giá trị trong ô thay đổi. Vậy thì khi D1 thay đổi bạn tính E1 (Lúc này đã có ô thay đổi giá trị) lúc này sự kiện Worksheet_Change tiếp tục chạy mà E1 thay đổi bạn lại tính D1 (Lúc này đã có ô thay đổi giá trị), Worksheet_Change tiếp tục chạy bạn tính E1 ... Nó chạy mãi. Chính vì vậy lệnh Application.EnableEvents = False sẽ tắt tự kiện Worksheet_Change và tính gía trị cho ô D1 hoặc E1 sau đó cho nó hoạt động trở lại bằng lệnh Application.EnableEvents = True
 
Upvote 0
Web KT
Back
Top Bottom