ตรวจสอบว่าเซลล์มีสตริงย่อยหรือไม่


229

มีฟังก์ชั่นที่สร้างขึ้นเพื่อตรวจสอบว่าเซลล์มีอักขระ / ซับสตริงที่กำหนดหรือไม่?

มันหมายความว่าคุณสามารถใช้ฟังก์ชั่นที่เป็นข้อความเช่นLeft/ Right/ Midบนพื้นฐานเงื่อนไขโดยไม่ต้องโยนข้อผิดพลาดเมื่อขาดตัวอักษรที่ขาดหายไป

คำตอบ:


374

ลองใช้สิ่งนี้:

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

นี้จะกลับTRUEถ้าเซลล์มีA3Some Text


7
ฉลาดแกมโกง! ขอบคุณ gwin003 :) ฉันยังคงแปลกใจเล็กน้อยที่ไม่มีฟังก์ชั่นที่ใช้งานง่ายสำหรับสิ่งนี้
geotheory

18
ใช่ฉันเห็นด้วยมันคงจะดีถ้ามีCONTAINS("Text", cell)ฟังก์ชั่น
gwin003

20
อาจจะคุ้มค่าที่จะทราบว่ากรณีนี้ฉันไม่รู้สึกและถ้าคุณต้องการจับคู่กรณีคุณควรใช้FIND()แทนSEARCH()
รหัส Jockey

7
มีข้อผิดพลาดในการใช้แทน, ;หลังจากเปลี่ยนสูตรที่ให้ไป=ISNUMBER(SEARCH("Some Text"; A3))ใช้งานได้ ขอบคุณ!
renatov

6
@renatov ที่จริงขึ้นอยู่กับตำแหน่งที่ตั้งของระบบปฏิบัติการของคุณ อักขระที่ใช้สำหรับ "list separator" โดยเฉพาะ
pepoluan

22

สูตรต่อไปนี้พิจารณาว่าข้อความ "CHECK" ปรากฏในเซลล์ C10 หรือไม่ หากไม่เป็นเช่นนั้นผลลัพธ์จะว่างเปล่า ถ้าเป็นเช่นนั้นผลลัพธ์จะเป็นงาน "ตรวจสอบ"

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

คุณสามารถใช้ช่องว่าง 4 หรือแท็บที่จุดเริ่มต้นของบรรทัดเพื่อเน้นบล็อครหัส
NiematojakTomasz

@Steve ขอขอบคุณ;)
Dimitri

12

สูตรนี้ดูเหมือนง่ายขึ้นสำหรับฉัน:

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

สิ่งนี้จะคืนค่า TRUE หากมี "SomeText" อยู่ภายใน A1

สูตร IsNumber / Search และ IsError / Find ที่กล่าวถึงในคำตอบอื่น ๆ นั้นทำงานได้อย่างแน่นอน แต่ฉันมักจะพบว่าตัวเองต้องการดูความช่วยเหลือหรือทดลองใน Excel บ่อยเกินไปกับสูตรเหล่านั้น


12

สำหรับผู้ที่ต้องการทำสิ่งนี้โดยใช้ฟังก์ชั่นเดียวภายในคำสั่ง IF ฉันใช้

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

เพื่อดูว่าซับสตริง TEXT อยู่ในเซลล์ A1 หรือไม่

[หมายเหตุ: TEXT ต้องมีเครื่องหมายดอกจันล้อมรอบ]


มันใช้งานได้ แต่ใช้สูตร COUNTIF เมื่อข้อมูลขนาดใหญ่ทำให้ไฟล์ไม่ตอบสนองแม้ขนาดไฟล์จะใหญ่มาก
Gaurravs

8

ลองใช้FIND()ฟังก์ชั่นใน Excel

ไวยากรณ์:

FIND( substring, string, [start_position])

ส่งคืน#VALUE!ถ้าไม่พบสตริงย่อย


ใช่ซ้อนกันในISNUMBERนี้ยังใช้งานได้สำหรับการแข่งขันที่เป็นกรณี ๆ ไปเท่านั้น
geotheory

1

ฉันชอบ Rink.Attendant.6 คำตอบ ฉันต้องการตรวจสอบหลายสตริงและทำอย่างนี้:

สถานการณ์แรก: ชื่อที่สามารถเป็นผู้สร้างบ้านหรือชื่อชุมชนและฉันต้องการที่จะสร้างถังเก็บเป็นกลุ่มเดียว เมื่อต้องการทำเช่นนี้ฉันกำลังมองหาคำว่า "ผู้สร้าง" หรือ "การก่อสร้าง" ฯลฯ ดังนั้น -

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

ยินดีต้อนรับสู่ SO คุณควรอ่านข้อมูลเกี่ยวกับสิ่งที่ทำให้คำตอบที่ดี
geotheory

ฉันไม่เข้าใจสิ่งที่ควรทำ .. ตรวจสอบตัวสร้างสองครั้งเมื่อสันนิษฐานว่าพอเพียงแล้ว หากพบตัวสร้างจะส่งคืนตัวสร้างมิฉะนั้นก็จะส่งคืนชุมชน การสร้างคำไม่ปรากฏที่ใดก็ได้ บางทีอาจจะเป็นสิ่งที่ชอบ=OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*construction*"))?
เพ้อฝัน

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

1

มันเป็นคำถามเก่า แต่ฉันคิดว่ามันยังใช้ได้อยู่

เนื่องจากไม่มีฟังก์ชั่น CONTAINS ทำไมไม่ประกาศใน VBA รหัสด้านล่างใช้ฟังก์ชั่น VBA Instr ซึ่งค้นหาสตริงย่อยในสตริง มันจะส่งกลับ 0 เมื่อไม่พบสตริง

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

วิธีที่ดีในการปรับปรุงประสิทธิภาพส่วนบุคคล แต่ด้วยค่าใช้จ่ายในการทำซ้ำฉันจะบอกว่า :)
geotheory

0

นี่เป็นคำถามเก่า แต่วิธีแก้ปัญหาสำหรับผู้ใช้ Excel 2016 หรือใหม่กว่าคือคุณสามารถลบความจำเป็นในการซ้อนกันได้ถ้าโครงสร้างโดยใช้IFS( condition1, return1 [,condition2, return2] ...)เงื่อนไขแบบใหม่

ฉันได้จัดรูปแบบแล้วเพื่อให้ชัดเจนยิ่งขึ้นเกี่ยวกับวิธีใช้สำหรับกรณีของคำถามนี้:

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

เนื่องจากSEARCHส่งคืนข้อผิดพลาดหากไม่พบสตริงฉันหุ้มด้วยISERROR(...)=FALSEเพื่อตรวจสอบความจริงแล้วส่งคืนค่าที่ต้องการ มันจะดีถ้าSEARCHส่งคืน 0 แทนที่จะเป็นข้อผิดพลาดในการอ่าน แต่นั่นก็เป็นวิธีที่มันทำงานได้อย่างน่าเสียดาย

หมายเหตุสำคัญอีกประการหนึ่งคือIFSจะคืนการแข่งขันที่พบก่อนดังนั้นการสั่งซื้อจึงเป็นสิ่งสำคัญ ตัวอย่างเช่นถ้าสตริงของฉันก็Surf, Surfing, Surfsเป็นString1,String2,String3ข้างต้นและสตริงเซลล์ของฉันคือมันจะตรงกับในระยะแรกแทนสองเพราะเป็นอักขระย่อยSurfing Surfดังนั้นตัวหารร่วมจะต้องอยู่ในรายการสุดท้าย ฉันIFSจะต้องได้รับคำสั่งSurfing, Surfs, Surfให้ทำงานอย่างถูกต้อง (การสลับSurfingและSurfsจะทำงานในตัวอย่างง่ายๆนี้) แต่Surfจะต้องเป็นครั้งสุดท้าย


ส่วนใหญ่จะต้องการถ้า / else ความสามารถในคำอื่น ๆ ค่าเริ่มต้น การเพิ่มคำพูดนี้อาจทำให้คำตอบของคุณน่าสนใจยิ่งขึ้น: "ไม่มีวิธีใดที่จะตั้งค่าเริ่มต้นหากการทดสอบทั้งหมดคืนค่า FALSE (เช่นค่าถ้าเป็นเท็จ) แทนป้อน TRUE สำหรับการทดสอบครั้งสุดท้าย ค่าเริ่มต้นถ้า FALSE "
whitneyland

-3

นี่คือสูตรที่ฉันใช้

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


สิ่งนี้จะตรวจสอบว่า "" หรือไม่ จะรวมอยู่ใน A1 และถ้าเป็นก็จะส่งคืน ... จำนวนอักขระที่เหลืออยู่ใน A1 เริ่มต้นด้วย "." ไม่แน่ใจว่าการคำนวณเพิ่มเติมนั้นเกี่ยวข้องกับที่นี่หรือไม่
เกรด 'Eh' เบคอน

ใช้น้อยที่สุดใช้IFERROR(LEN(A1) - FIND(".", A1), 0)
ไนเจลทัช
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.