Nhờ các cao nhân chỉ cho hàm tìm chuỗi kỹ tự này

Liên hệ QC

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
    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

  • Book1 (1).xlsm
    14.1 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"
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

  • Book1.xlsm
    18.9 KB · Đọc: 7
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
    18.6 KB · Đọc: 4
Web KT

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

Back
Top Bottom