Nhờ các cao nhân chỉ cho hàm tìm chuỗi kỹ tự này (5 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

nguyenhuuhieu94dha

Thành viên mới
Tham gia
30/10/19
Bài viết
21
Được thích
0
Tìm trong E2:E8 có văn bản trùng với chuỗi A2 nếu có thì cho kết quả " Đào đất bằng máy"Tìm kiếm văn bản tring cộtTìm trong E2:E8 có văn bản trùng với chuỗi A2 nếu có thì cho kết quả " Đào đất bằng máy"
 

File đính kèm

  • z2794145988637_5b7516f13d2e8acde7277de4a5267a65.jpg
    z2794145988637_5b7516f13d2e8acde7277de4a5267a65.jpg
    88.6 KB · Đọc: 11
  • Book1.xlsm
    Book1.xlsm
    13.2 KB · Đọc: 6
Tìm trong E2:E8 có văn bản trùng với chuỗi A2 nếu có thì cho kết quả " Đào đất bằng máy"Tìm kiếm văn bản tring cộtTìm trong E2:E8 có văn bản trùng với chuỗi A2 nếu có thì cho kết quả " Đào đất bằng máy"
Bạn thử với công thức này xem sao:
Mã:
=IF(NOT(ISERR(SEARCH($E$2,A2))),$E$2,IF(NOT(ISERR(SEARCH($E$3,A2))),$E$3,IF(NOT(ISERR(SEARCH($E$4,A2))),$E$4,IF(NOT(ISERR(SEARCH($E$5,A2))),$E$5,IF(NOT(ISERR(SEARCH($E$6,A2))),$E$6,IF(NOT(ISERR(SEARCH($E$7,A2))),$E$7,IF(NOT(ISERR(SEARCH($E$8,A2))),$E$8,"")))))))
 

File đính kèm

Tìm trong E2:E8 có văn bản trùng với chuỗi A2 nếu có thì cho kết quả " Đào đất bằng máy"Tìm kiếm văn bản tring cộtTìm trong E2:E8 có văn bản trùng với chuỗi A2 nếu có thì cho kết quả " Đào đất bằng máy"
Nếu đổi lại là : Tim trong A2 có chuỗi trùng với 1 đoạn chuỗi trong vùng E2:A8 thì làm được, vì nó phù hợp với quy luật là tìm chuỗi ngắn (chuỗi con= 1 ô trong vùng E2:E8) trong chuỗi dài(chuỗi mẹ=A2), còn ngược lại là tìm chuỗi dài trong một chuỗi ngắn hơn thì sẽ không có kết quả.
Bạn tham khảo hàm UDF này (Của anh NDU) nhé
Mã:
Option Explicit

Function StLookup(LVal As String, LArray As Range, Optional ColIndex As Byte = 1) As String
  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
mở file. ấn Alt+F11 cửa sổ VBE hiện ra, vào click vào thẻ insert==>một cửa sổ modul hiện ra ở bên phải Copy đoạn code trên và dán vào modul
trên Sheet gõ vào B2=Stlookup(A2,E2:E8) và enter
 

File đính kèm

Lần chỉnh sửa cuối:
Nếu đổi lại là : Tim trong A2 có chuỗi trùng với 1 đoạn chuỗi trong vùng E2:A8 thì làm được, vì nó phù hợp với quy luật là tìm chuỗi ngắn (chuỗi con= 1 ô trong vùng E2:E8) trong chuỗi dài(chuỗi mẹ=A2), còn ngược lại là tìm chuỗi dài trong một chuỗi ngắn hơn thì sẽ không có kết quả.
Thử xem bài #2 nhé.
 
Bạn thử với công thức này xem sao:
Mã:
=IF(NOT(ISERR(SEARCH($E$2,A2))),$E$2,IF(NOT(ISERR(SEARCH($E$3,A2))),$E$3,IF(NOT(ISERR(SEARCH($E$4,A2))),$E$4,IF(NOT(ISERR(SEARCH($E$5,A2))),$E$5,IF(NOT(ISERR(SEARCH($E$6,A2))),$E$6,IF(NOT(ISERR(SEARCH($E$7,A2))),$E$7,IF(NOT(ISERR(SEARCH($E$8,A2))),$E$8,"")))))))
CODE của bạn dùng rất tốt. Xin cảm ơn. Liệu có cách nào để thu gọn code này lại k nhỉ vì nếu chuỗi dài hơn thì sẽ rất khó viết
 
Thử công thức này:

=LOOKUP(1,-SEARCH($E$2:$E$8,A2),$E$2:$E$8)
Đôi khi đơn giản vậy mà nghĩ không ra, cứ đi tìm cái phức tạp! Mình già rồi. Thêm cái bẫy lỗi nữa thì OK.

Mã:
=IFERROR(LOOKUP(1,-SEARCH($E$2:$E$8,A2),$E$2:$E$8),"")
 
Đôi khi đơn giản vậy mà nghĩ không ra, cứ đi tìm cái phức tạp! Mình già rồi. Thêm cái bẫy lỗi nữa thì OK.

Mã:
=IFERROR(LOOKUP(1,-SEARCH($E$2:$E$8,A2),$E$2:$E$8),"")
Rất cảm ơn bạn. Hàm của bạn dùng rất tốt
Bài đã được tự động gộp:

Thử công thức này:

=LOOKUP(1,-SEARCH($E$2:$E$8,A2),$E$2:$E$8)
Rất cảm ơn bạn
 
Em làm vầy đúng không các bắc.
=IFERROR(IF(SEARCH(E2,$A$2)<>"","Đào đất bằng máy",""),"")
 
Em làm vầy đúng không các bắc.
=IFERROR(IF(SEARCH(E2,$A$2)<>"","Đào đất bằng máy",""),"")
Hàm SEARCH chỉ trả về dạng số nếu nó tìm thấy, còn không là lỗi #VALUE! chứ không trả về giá trị rỗng ("") vì thế nếu bạn làm đúng công thức phải thế này:
Với E2 = "Đào đất bằng máy"
=IFERROR(IF(SEARCH($E$2,A2),$E$2,""),"")

Nhưng thật ra bạn mới tìm đúng 1 kết quả, trong khi nó có 7 ô để tìm.
 

File đính kèm

  • z2794145988637_5b7516f13d2e8acde7277de4a5267a65.jpg
    z2794145988637_5b7516f13d2e8acde7277de4a5267a65.jpg
    50.8 KB · Đọc: 3
Lần chỉnh sửa cuối:
Hàm SEARCH chỉ trả về dạng số nếu nó tìm thấy, còn không là lỗi #VALUE! chứ không trả về giá trị rỗng ("") vì thế nếu bạn làm đúng công thức phải thế này:
Với E2 = "Đào đất bằng máy"
=IFERROR(IF(SEARCH($E$2,A2),$E$2,""),"")

Nhưng thật ra bạn mới tìm đúng 1 kết quả, trong khi nó có 7 ô để tìm.
Bác cho em hỏi. chủ thớt đang muốn tìm các giá trị từ E2 đến E8 trong chuỗi ở ô A2 thì mình phải $A$2 chứ nhỉ? em có hiểu sai đề không?
 
Bác cho em hỏi. chủ thớt đang muốn tìm các giá trị từ E2 đến E8 trong chuỗi ở ô A2 thì mình phải $A$2 chứ nhỉ? em có hiểu sai đề không?
A2, A3, ..., An ... là các câu có chứa chuỗi trong dãy E2:E8 nên nó chạy theo A còn E là cố định.
 
Nếu đổi lại là : Tim trong A2 có chuỗi trùng với 1 đoạn chuỗi trong vùng E2:A8 thì làm được, vì nó phù hợp với quy luật là tìm chuỗi ngắn (chuỗi con= 1 ô trong vùng E2:E8) trong chuỗi dài(chuỗi mẹ=A2), còn ngược lại là tìm chuỗi dài trong một chuỗi ngắn hơn thì sẽ không có kết quả.
Bạn tham khảo hàm UDF này (Của anh NDU) nhé
Mã:
Option Explicit

Function StLookup(LVal As String, LArray As Range, Optional ColIndex As Byte = 1) As String
  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
mở file. ấn Alt+F11 cửa sổ VBE hiện ra, vào click vào thẻ insert==>một cửa sổ modul hiện ra ở bên phải Copy đoạn code trên và dán vào modul
trên Sheet gõ vào B2=Stlookup(A2,E2:E8) và enter
Rất cảm ơn bạn. Bạn có thể chỉnh sửa code này thành
 

File đính kèm

  • z2797265198038_2fa85d6a51db209d69f91c99b40340a6.jpg
    z2797265198038_2fa85d6a51db209d69f91c99b40340a6.jpg
    57.5 KB · Đọc: 7
  • Book1.xlsm
    Book1.xlsm
    18.6 KB · Đọc: 4
Web KT

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

Back
Top Bottom