Kiểm tra xem một ô có chứa chuỗi con không


229

Có một hàm dựng sẵn để kiểm tra xem một ô có chứa một ký tự / chuỗi con đã cho không?

Điều đó có nghĩa là bạn có thể áp dụng các chức năng văn bản như Left/ Right/ Midtrên cơ sở có điều kiện mà không ném lỗi khi phân định các ký tự không có.

Câu trả lời:


374

Hãy thử sử dụng cái này:

=ISNUMBER(SEARCH("Some Text", A3))

Điều này sẽ trở lại TRUEnếu ô A3chứa Some Text.


7
Xảo quyệt! Cảm ơn gwin003 :) Tôi vẫn hơi ngạc nhiên khi không có chức năng trực quan hơn cho việc này.
địa lý

18
Vâng tôi đồng ý, sẽ rất tốt nếu có một CONTAINS("Text", cell)chức năng.
gwin003

20
có thể đáng để lưu ý rằng trường hợp này tôi không nhạy cảm, và nếu bạn muốn khớp trường hợp, bạn nên sử dụng FIND()thay choSEARCH()

7
có một lỗi sử dụng ,thay vì ;. Sau khi thay đổi công thức được cung cấp để =ISNUMBER(SEARCH("Some Text"; A3))nó hoạt động. Cảm ơn!
renatov

6
@renatov thực sự phụ thuộc vào ngôn ngữ của hệ điều hành của bạn; cụ thể, ký tự được sử dụng cho "danh sách phân tách".
pepoluan

22

Công thức sau đây xác định nếu văn bản "KIỂM TRA" xuất hiện trong ô C10. Nếu không, kết quả là trống. Nếu có, kết quả là công việc "KIỂM TRA".

=IF(ISERROR(FIND("CHECK",C10,1)),"","CHECK")

Bạn có thể sử dụng 4 khoảng trắng hoặc tab ở đầu dòng để tô sáng khối mã.
NiematojakTomasz

@Steve, CẢM ƠN BẠN;)
Dimitri

12

Công thức này có vẻ trực quan hơn đối với tôi:

=SUBSTITUTE(A1,"SomeText","") <> A1

cái này trả về TRUE nếu "someText" được chứa trong A1.

Các công thức IsNumber / Search và IsError / Find được đề cập trong các câu trả lời khác chắc chắn có tác dụng, nhưng tôi luôn thấy mình cần phải xem trợ giúp hoặc thử nghiệm trong Excel quá thường xuyên với những công thức đó.


12

Đối với những người muốn thực hiện việc này bằng một hàm duy nhất bên trong câu lệnh IF, tôi sử dụng

=IF(COUNTIF(A1,"*TEXT*"),TrueValue,FalseValue)

để xem liệu chuỗi con có ở ô A1 không

[LƯU Ý: VĂN BẢN cần có các dấu sao xung quanh nó]


Nó hoạt động, nhưng sử dụng công thức COUNTIF khi dữ liệu khổng lồ, khiến tệp không phản hồi, thậm chí kích thước tệp trở nên rất lớn
Gaurravs

8

Kiểm tra FIND()chức năng trong Excel.

Cú pháp:

FIND( substring, string, [start_position])

Trả về #VALUE!nếu nó không tìm thấy chuỗi con.


Có lồng nhau trong ISNUMBERnày cũng hoạt động, chỉ cho các trường hợp phù hợp với trường hợp nhạy cảm.
địa lý

1

Tôi thích câu trả lời của Rink. Tôi thực sự muốn kiểm tra nhiều chuỗi và thực hiện theo cách này:

Đầu tiên là tình huống: Tên có thể là nhà xây dựng hoặc tên cộng đồng và tôi cần xô các nhà xây dựng thành một nhóm. Để làm điều này tôi đang tìm từ "người xây dựng" hoặc "công trình", v.v.

=IF(OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*builder*")),"Builder","Community")

Chào mừng đến với SO. Bạn nên đọc lên những gì làm cho một câu trả lời tốt .
địa lý

Tôi không hiểu điều này có nghĩa là gì .. nó kiểm tra trình xây dựng hai lần khi có lẽ một lần sẽ đủ. Nếu nó tìm thấy trình xây dựng, nó trả về trình xây dựng, nó sẽ trả về cộng đồng. Việc xây dựng từ không xuất hiện ở bất cứ đâu. Có lẽ một cái gì đó như thế =OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*construction*"))nào?
tưởng tượng

COUNTIFS:COUNTIFS(A1,"*builder*",A1,"*construction*")
vstepaniuk

1

Đó là một câu hỏi cũ nhưng tôi nghĩ nó vẫn còn hiệu lực.

Vì không có chức năng CONTAIN, tại sao không khai báo nó trong VBA? Đoạn mã dưới đây sử dụng hàm VBA م, tìm chuỗi con trong chuỗi. Nó trả về 0 khi không tìm thấy chuỗi.

Public Function CONTAINS(TextString As String, SubString As String) As Integer
    CONTAINS = InStr(1, TextString, SubString)
End Function

Cách tốt để cải thiện hiệu quả cá nhân, nhưng với chi phí tái sản xuất tôi muốn nói :)
geotheory

0

Đây là một câu hỏi cũ nhưng một giải pháp cho những người sử dụng Excel 2016 hoặc mới hơn là bạn có thể loại bỏ nhu cầu lồng nhau nếu các cấu trúc bằng cách sử dụng IFS( condition1, return1 [,condition2, return2] ...)điều kiện mới .

Tôi đã định dạng nó để làm cho nó rõ ràng hơn về cách sử dụng nó cho trường hợp của câu hỏi này:

=IFS(
ISERROR(SEARCH("String1",A1))=FALSE,"Something1",
ISERROR(SEARCH("String2",A1))=FALSE,"Something2",
ISERROR(SEARCH("String3",A1))=FALSE,"Something3"
)

SEARCHtrả về lỗi nếu không tìm thấy chuỗi, tôi đã bọc nó bằng một ISERROR(...)=FALSEdấu kiểm để kiểm tra sự thật và sau đó trả về giá trị mong muốn. Sẽ thật tuyệt nếu được SEARCHtrả về 0 thay vì lỗi về khả năng đọc, nhưng đó chỉ là cách nó hoạt động không may.

Một lưu ý quan trọng khác là IFSsẽ trả lại trận đấu mà nó tìm thấy đầu tiên và do đó việc đặt hàng rất quan trọng. Ví dụ: nếu các chuỗi của tôi Surf, Surfing, Surfsnhư String1,String2,String3trên và chuỗi ô của tôi Surfingthì nó sẽ khớp với thuật ngữ đầu tiên thay vì chuỗi thứ hai vì chuỗi con là Surf. Do đó mẫu số chung cần phải là cuối cùng trong danh sách. My IFSsẽ cần phải được yêu cầu Surfing, Surfs, Surflàm việc chính xác (hoán đổi SurfingSurfscũng sẽ hoạt động trong ví dụ đơn giản này), nhưng Surfsẽ cần phải là cuối cùng.


hầu hết sẽ muốn nếu / khác khả năng, nói cách khác là một giá trị mặc định. Thêm trích dẫn này có thể mở rộng sự hấp dẫn của câu trả lời của bạn: "Không có cách nào để đặt mặc định nếu tất cả các bài kiểm tra trả về FALSE (nghĩa là một giá trị nếu sai). Thay vào đó, hãy nhập TRUE cho bài kiểm tra cuối cùng giá trị mặc định nếu FALSE "
whitneyland

-3

Đây là công thức tôi đang sử dụng

=IF( ISNUMBER(FIND(".",A1)), LEN(A1) - FIND(".",A1), 0 )


Điều này kiểm tra xem nếu "." được bao gồm trong A1 và nếu có, nó sẽ trả về ... số lượng ký tự còn lại trong A1, bắt đầu bằng ".". Không chắc chắn rằng tính toán bổ sung có liên quan ở đây.
Lớp 'Eh' Bacon

Ít nhất, sử dụngIFERROR(LEN(A1) - FIND(".", A1), 0)
Nigel Touch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.