Chỉ lấy giá trị lọc cho lần tìm đầy tiên tiên cho hàm VLookup

Liên hệ QC

hoahuongduong1986

Thành viên thường trực
Tham gia
14/11/18
Bài viết
346
Được thích
40
Dear Anh chị và các bạn
Em có File kèm theo. Code nào thay cho hàm vùng màu đỏ được ạ (Chỉ lọc cho giá trị đầu tiên được tìm thấy). Em cảm ơn ạ.
 

File đính kèm

  • Code VBA cho ham Vlookup.xls
    35 KB · Đọc: 19
Dear Anh chị và các bạn
Em có File kèm theo. Code nào thay cho hàm vùng màu đỏ được ạ (Chỉ lọc cho giá trị đầu tiên được tìm thấy). Em cảm ơn ạ.
Công thức vẫn giải quyết được sao bạn phải cần VBA? Nếu sợ Countif làm chậm file thì có thể dùng hàm Match, tôi nghĩ sẽ cải thiện được.
 
Upvote 0
Mình muốn tìm hiểu cách làm bằng Code bạn.
Muốn VBA thì tặng bạn "dao mổ Trâu", không nhận "bảo hành".
PHP:
Public Sub s_Gpe()
Dim sArr(), dArr(), I As Long, R As Long, Txt As String
With CreateObject("Scripting.Dictionary")
    sArr = Range("B5", Range("C50000").End(xlUp)).Value
    R = UBound(sArr)
    For I = 1 To R
        Txt = sArr(I, 1)        'Ma cua hang'
        .Item(Txt) = sArr(I, 2) 'Du dau'
    Next I
    '---------------------------------------'
    sArr = Range("H7", Range("H7").End(xlDown)).Value
    R = UBound(sArr)
    ReDim dArr(1 To R, 1 To 1)
    For I = 1 To R
        Txt = sArr(I, 1) & "#"  'Ma cua hang dau tien'
        If Not .Exists(Txt) Then
            .Item(Txt) = ""
            Txt = sArr(I, 1)    'Ma cua hang'
            If .Exists(Txt) Then dArr(I, 1) = .Item(Txt) 'So luong'
        End If
    Next I
End With
    '---------------------------------------'
    Range("L7").Resize(R) = dArr
End Sub
 
Upvote 0
Muốn VBA thì tặng bạn "dao mổ Trâu", không nhận "bảo hành".
PHP:
Public Sub s_Gpe()
Dim sArr(), dArr(), I As Long, R As Long, Txt As String
With CreateObject("Scripting.Dictionary")
    sArr = Range("B5", Range("C50000").End(xlUp)).Value
    R = UBound(sArr)
    For I = 1 To R
        Txt = sArr(I, 1)        'Ma cua hang'
        .Item(Txt) = sArr(I, 2) 'Du dau'
    Next I
    '---------------------------------------'
    sArr = Range("H7", Range("H7").End(xlDown)).Value
    R = UBound(sArr)
    ReDim dArr(1 To R, 1 To 1)
    For I = 1 To R
        Txt = sArr(I, 1) & "#"  'Ma cua hang dau tien'
        If Not .Exists(Txt) Then
            .Item(Txt) = ""
            Txt = sArr(I, 1)    'Ma cua hang'
            If .Exists(Txt) Then dArr(I, 1) = .Item(Txt) 'So luong'
        End If
    Next I
End With
    '---------------------------------------'
    Range("L7").Resize(R) = dArr
End Sub
Em cảm ơn anh ạ ! nhìn Code hấp dẫn quá. Để em tìm hiểu ý nghĩa code ạ.
 
Upvote 0
Em đang tìm hiểu đoạn Code anh trợ giúp. A cho em hỏi chút ạ.
- Cái ký tự # ở đoạn này Txt = sArr(I, 1) & "#" nghĩa là gì ạ ?
- Về việc đặt tên: Em thấy anh cùng dùng sArr, và R cho hai chỉ dẫn khác nhau
sArr = Range("H7", Range("H7").End(xlDown)).Value
sArr = Range("B5", Range("C50000").End(xlUp)).Value
Khi em thay đổi sArr hoặc R ở hai đoạn code thì code vẫn ra kết quả. Như vậy trong DIC nó vẫn phân biệt được hai việc khác nhau mặc dù cùng hỉ dẫn ạ.
 
Upvote 0
Em đang tìm hiểu đoạn Code anh trợ giúp. A cho em hỏi chút ạ.
- Cái ký tự # ở đoạn này Txt = sArr(I, 1) & "#" nghĩa là gì ạ ?
- Về việc đặt tên: Em thấy anh cùng dùng sArr, và R cho hai chỉ dẫn khác nhau
sArr = Range("H7", Range("H7").End(xlDown)).Value
sArr = Range("B5", Range("C50000").End(xlUp)).Value
Khi em thay đổi sArr hoặc R ở hai đoạn code thì code vẫn ra kết quả. Như vậy trong DIC nó vẫn phân biệt được hai việc khác nhau mặc dù cùng hỉ dẫn ạ.
Đã nói là "không bảo hành" sao lại đem hàng ra trả lại?
Tôi không qua trường lớp lý thuyết nào nên khó mà giải thích, tôi chỉ viết theo kiểu hiểu nôm na là:
- sArr(I, 1) là "thằng A", sArr(I, 1) & "#" là "Vợ thằng A".
Biết được thằng A sẽ tìm được vợ thằng A, con "của vợ" thằng A, "Tía má" vợ thằng A, v.v... và ngược lại.
- Ban đầu thằng sArr đầu quân cho "biệt kích" (cột B,C), sau khi làm xong nhiệm vụ thì "đào ngũ".
Sau đó sArr đầu quân cho "thiên thần mũ đỏ" (cột H), làm lại cuộc đời.
"Đóng cửa" không nhận hàng trả lại!
--------------------------
Nếu rảnh thì đọc, sửa lại trên tiêu đề cho rõ nghĩa:
Chỉ lấy giá trị lọc cho lần tìm đầy tiên tiên cho hàm VLookup
 
Lần chỉnh sửa cuối:
Upvote 0
Dear Anh chị và các bạn
Em có File kèm theo. Code nào thay cho hàm vùng màu đỏ được ạ (Chỉ lọc cho giá trị đầu tiên được tìm thấy). Em cảm ơn ạ.
Thử tìm hiểu lệnh Remove Key
Mã:
Sub ABC()
  Dim aDu(), aMa(), Res()
  Dim i&, sRow&, iKey
 
  aDu = Range("B5", Range("C50000").End(xlUp)).Value
  aMa = Range("H7", Range("H7").End(xlDown)).Value
  With CreateObject("Scripting.Dictionary")
    sRow = UBound(aDu)
    For i = 1 To sRow
      .Item(aDu(i, 1)) = aDu(i, 2)
    Next i

    sRow = UBound(aMa)
    ReDim Res(1 To sRow, 1 To 1)
    For i = 1 To sRow
      iKey = aMa(i, 1)
      If .Exists(iKey) Then
        Res(i, 1) = .Item(iKey) 'So luong'
        .Remove (iKey) 'Loai bo Cua hang da lay so du
      End If
    Next i
  End With
  Range("K7").Resize(sRow) = Res
End Sub
 
Upvote 0
Đã nói là "không bảo hành" sao lại đem hàng ra trả lại?
Tôi không qua trường lớp lý thuyết nào nên khó mà giải thích, tôi chỉ viết theo kiểu hiểu nôm na là:
- sArr(I, 1) là "thằng A", sArr(I, 1) & "#" là "Vợ thằng A".
Biết được thằng A sẽ tìm được vợ thằng A, con "của vợ" thằng A, "Tía má" vợ thằng A, v.v... và ngược lại.
- Ban đầu thằng sArr đầu quân cho "biệt kích" (cột B,C), sau khi làm xong nhiệm vụ thì "đào ngũ".
Sau đó sArr đầu quân cho "thiên thần mũ đỏ" (cột H), làm lại cuộc đời.
"Đóng cửa" không nhận hàng trả lại!
--------------------------
Nếu rảnh thì đọc, sửa lại trên tiêu đề cho rõ nghĩa:
Chỉ lấy giá trị lọc cho lần tìm đầy tiên tiên cho hàm VLookup
haha. A viết hay quá. Em cảm ơn anh, em hiểu láng máng rồi em sẽ hiểu dần dần, mưa dần hi vọng sẽ thấm được ít ạ.
 
Upvote 0
haha. A viết hay quá. Em cảm ơn anh, em hiểu láng máng rồi em sẽ hiểu dần dần, mưa dần hi vọng sẽ thấm được ít ạ.
Trong trường hợp này, cách của bài #8 cũng rất hay mà tôi chưa nghĩ tới:
- Thằng A đầu quân cho "Chị Đại", lấy "số quân" và "tiền cọc", xong thì "đào ngũ".
- Sau đó thằng A đầu quân cho "Anh Bé", bị "xét số quân" đã có bên "Chị Đại", bèn bị tịch thu "tiền cọc" và "xóa quân tịch". Coi như thằng A chưa hề tham gia đội quân nào, tiền mất tật mang, vợ nó tìm cũng không ra (chỉ còn cách lấy chồng khác thôi).
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom