Function tìm kiếm có điều kiện

Liên hệ QC

HUYBOY

Thành viên chính thức
Tham gia
5/4/20
Bài viết
77
Được thích
3
Kính nhờ Anh Chị. Em có file excel muốn search theo Danh sách cột A ở sheet 2 vào cột A sheet 1, và trả kết quả tương ứng với bảng Danh sách đó. Kính nhờ các Cao nhân giúp em viết function với ạ
Em cảm ơn ạ
 

File đính kèm

  • search.xlsm
    19.5 KB · Đọc: 29
  • image001(25).png
    image001(25).png
    35.5 KB · Đọc: 14
Kính nhờ Anh Chị. Em có file excel muốn search theo Danh sách cột A ở sheet 2 vào cột A sheet 1, và trả kết quả tương ứng với bảng Danh sách đó. Kính nhờ các Cao nhân giúp em viết function với ạ
Em cảm ơn ạ
Không phải cao nhân viết được không bạn.
 
Upvote 0
Dạ. Em cảm ơn trước ạ
Hên sui nhé.
Mã:
Function laygiatri(ByVal dk As String, mang As Range) As String
        Dim arr, i As Long
        arr = mang.Value
        For i = 1 To UBound(arr)
            If InStr(arr(i, 1), dk) Then
               laygiatri = arr(i, 2)
               Exit Function
            End If
        Next i
        laygiatri = Empty
End Function
=laygiatri(A2,Sheet1!$A$2:$B$4)
 
Upvote 0
Kính nhờ Anh Chị. Em có file excel muốn search theo Danh sách cột A ở sheet 2 vào cột A sheet 1, và trả kết quả tương ứng với bảng Danh sách đó. Kính nhờ các Cao nhân giúp em viết function với ạ
Em cảm ơn ạ
Chắc cao nhân thiệt, chứ đọc dô không hiểu đầu bài muốn gì :D
 
Upvote 0
Ý em là như này ý ạ
 

File đính kèm

  • image001(25).png
    image001(25).png
    35.5 KB · Đọc: 21
Upvote 0
Thử thêm cái này xem thế nào
Mã:
Function XXLookUp(ByVal Chuoi As String, Rng As Range) As String
        Dim sArr(), i&, Dic As Object, Key
        Set Dic = CreateObject("scripting.dictionary")
        sArr = Rng.Value
        For i = 1 To UBound(sArr)
            Dic.Item(sArr(i, 1)) = i
        Next
        For Each Key In Dic.keys
            If InStr(Chuoi, Key) > 0 Then
               XXLookUp = sArr(Dic.Item(Key), 2)
               Exit Function
            End If
        Next
        Set Dic = Nothing
End Function
Mã:
=XXLookUp(A2,Sheet2!$A$2:$B$4)
 
Upvote 0
Thử thêm cái này xem thế nào
Mã:
Function XXLookUp(ByVal Chuoi As String, Rng As Range) As String
        Dim sArr(), i&, Dic As Object, Key
        Set Dic = CreateObject("scripting.dictionary")
        sArr = Rng.Value
        For i = 1 To UBound(sArr)
            Dic.Item(sArr(i, 1)) = i
        Next
        For Each Key In Dic.keys
            If InStr(Chuoi, Key) > 0 Then
               XXLookUp = sArr(Dic.Item(Key), 2)
               Exit Function
            End If
        Next
        Set Dic = Nothing
End Function
Mã:
=XXLookUp(A2,Sheet2!$A$2:$B$4)
Không hiểu sao phải thêm Dictionary làm gì nhỉ.Cứ chạy 1 vòng lặp so sánh là được mà.
 
Upvote 0
Kính nhờ Anh Chị. Em có file excel muốn search theo Danh sách cột A ở sheet 2 vào cột A sheet 1, và trả kết quả tương ứng với bảng Danh sách đó. Kính nhờ các Cao nhân giúp em viết function với ạ
Em cảm ơn ạ
Thấy đề bài giống, góp vui thêm 1 hàm của anh @ndu96081631 (1 siêu nhân về VBA)- viết đã lâu lắm rồi để chủ thớt và mọi người th1am khảo.
Mã:
Function StLookup(LVal As String, LArray As Range, Optional ColIndex As Byte) As String
'By ndu96081631
  Dim Clls As Range, PosSt As Long, Temp As Long
  PosSt = Len(LVal) + 1
  For Each Clls In LArray.Resize(, 1)
    Temp = InStr(UCase$(LVal), UCase$(Clls))
    If Temp > 0 And Temp < PosSt Then
      PosSt = Temp
      StLookup = Clls(, ColIndex)
    End If
  Next Clls
End Function
 
Upvote 0
Đúng là nó ở cái tầm chú nhỉ?
Thì đã nói đúng là một siêu nhân của VBA. Hàm StLookup này anh ấy viết đã lâu rồi, chạy ổn định, và có tùy biến lấy kết quả ở cột thứ mấy (2,3,4...)trong vùng tham chiếu
Hàm mà bạn viết cũng được đấy chứ. Mình không viết được hàm như bạn đâu, ngưỡng mộ.
 
Upvote 0
Hàm mà bạn viết cũng được đấy chứ. Mình không viết được hàm như bạn đâu, ngưỡng mộ.
Chú lại quá khen rồi. Cháu lần đầu tiên viết. Vẫn còn dư âm của việc viết sub, nên chẳng biết như thế nào là tối ưu, y chang kiểu nghĩ sao viết như vậy á chú
 
Upvote 0
Chú lại quá khen rồi. Cháu lần đầu tiên viết. Vẫn còn dư âm của việc viết sub, nên chẳng biết như thế nào là tối ưu, y chang kiểu nghĩ sao viết như vậy á chú
Không qua khen đâu. Thật mà. Mình thi thoảng cũng vọc vạch viết UDF nhưng phải bò ra mới được (có cái không thành công), chủ yếu là viết Sub sau đó mò dần chuyển sang UDF. Đây có lẽ là tư duy của mình theo lối mòn rồi, khó chuyển. Hai nữa là không có cơ bản nên cứ mò dần, mò dần, thế nên mới nói là có cái thành công, có cái không thành công.
Nhiều bài mình viết code ra được kết quả, nhưng tính ngắn gọn, thời gian chạy ra kết quả và xử lý thấu đáo các vấn đề thì cũng có rất nhiều cái còn được các thành viên khác chỉ ra thiếu sót.
Theo dõi bạn thấy bạn có rất nhiều bài giải quyết được vấn đề thấu đáo, tối ưu ( muốn nói trình của bạn rất rất cao). Vậy nên ngưỡng mộ bạn thì có gì là quá.
 
Upvote 0
Theo dõi bạn thấy bạn có rất nhiều bài giải quyết được vấn đề thấu đáo, tối ưu ( muốn nói trình của bạn rất rất cao).
Cháu cũng y chang như chú thôi. Cũng học ngang chứ chú nói trình cao người ta cười chết, do tính chất công việc tiếp xúc với excell hàng ngày. Chứ thực ra cháu kiểu dạng mỗi chỗ biết 1 xíu. Như chú và nhiều thầy cô anh chị khác trên diễn đàn. Phải ghi nhận 1 điều. Họ nhảy số nhanh thật. Cũng muốn học rộng ra mà chẳng biết bắt đầu từ đâu, ai dạy, và phải học như thế nào. Chứ tích lũy kiểu như cháu bây giờ chắc hơi lâu.
 
Upvote 0
Sao quý vị "cao nhân" thiệt.
Cỡ tôi thì cứ dùng hàm Range.Find với xlPart nếu range có nhiều cột.
Nếu range có một cột thì dùng hàm Match.
 
Upvote 0
Cháu cũng y chang như chú thôi. Cũng học ngang chứ chú nói trình cao người ta cười chết, do tính chất công việc tiếp xúc với excell hàng ngày. Chứ thực ra cháu kiểu dạng mỗi chỗ biết 1 xíu. Như chú và nhiều thầy cô anh chị khác trên diễn đàn. Phải ghi nhận 1 điều. Họ nhảy số nhanh thật. Cũng muốn học rộng ra mà chẳng biết bắt đầu từ đâu, ai dạy, và phải học như thế nào. Chứ tích lũy kiểu như cháu bây giờ chắc hơi lâu.
Ơ lạ nhỉ. Mỗi người đều có quyền ngưỡng mộ ai đó. Lý do không chính đáng, không thuyết phục thì không có quyền ngưỡng mộ? Ngưỡng mộ là ngưỡng mộ. Người ta ngưỡng mộ cô Hoa vì có hàm răng đều thẳng tắp. Tôi ngưỡng mộ cô Lan, chết mê chết mệt vì cái răng khểnh. Không được phép? :D
 
Upvote 0
Ơ lạ nhỉ. Mỗi người đều có quyền ngưỡng mộ ai đó. Lý do không chính đáng, không thuyết phục thì không có quyền ngưỡng mộ? Ngưỡng mộ là ngưỡng mộ. Người ta ngưỡng mộ cô Hoa vì có hàm răng đều thẳng tắp. Tôi ngưỡng mộ cô Lan, chết mê chết mệt vì cái răng khểnh. Không được phép? :D
Được chứ chú. Cũng như cháu ngưỡng mộ 1 vài người trên này á.
Tại thấy bản thân vẫn còn non kém và cần học hỏi nhiều, mà thấy chú ấy cũng giỏi nên không giám để họ ngưỡng mộ ấy
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom