Проверьте, содержит ли ячейка подстроку


229

Есть ли встроенная функция, чтобы проверить, содержит ли ячейка данный символ / подстроку?

Это означало бы, что вы можете применять текстовые функции, такие как Left/ Right/, Midна условной основе, не выдавая ошибок, если символы-разделители отсутствуют.

Ответы:


374

Попробуйте использовать это:

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

Это вернется, TRUEесли ячейка A3содержит Some Text.


7
Хитрый! Спасибо gwin003 :) Я все еще немного удивлен, что для этого нет более интуитивно понятной функции.
Геофизика

18
Да, я согласен, было бы хорошо, если бы была CONTAINS("Text", cell)функция.
gwin003

20
возможно, стоит отметить, что это не учитывает регистр, и если вы хотите сопоставить регистр, вы должны использовать FIND()вместоSEARCH()
Code Jockey

7
получил ошибку, используя ,вместо ;. После изменения предоставленной формулы к =ISNUMBER(SEARCH("Some Text"; A3))нему сработало. Спасибо!
ренатов

6
@renatov, который на самом деле зависит от локали вашей ОС; в частности, символ, используемый для «разделителя списка».
pepoluan

22

Следующая формула определяет, появляется ли текст «ПРОВЕРКА» в ячейке C10. Если это не так, результат будет пустым. Если это так, результатом является работа «ПРОВЕРКА».

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

Вы можете использовать 4 пробела или табуляцию в начале строки, чтобы выделить блок кода.
NiematojakTomasz

@Steve, СПАСИБО;)
Дмитрий

12

Эта формула кажется мне более понятной:

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

это возвращает TRUE, если "SomeText" содержится в A1.

Формулы IsNumber / Search и IsError / Find, упомянутые в других ответах, безусловно, работают, но мне всегда приходится обращать внимание на помощь или слишком часто экспериментировать с Excel.


12

Для тех, кто хотел бы сделать это, используя единственную функцию внутри оператора IF, я использую

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

чтобы увидеть, находится ли подстрока TEXT в ячейке A1

[ПРИМЕЧАНИЕ: ТЕКСТ должен иметь звездочки вокруг него]


Это работает, но использование формулы COUNTIF, когда огромные данные приводят к тому, что файл не отвечает, даже размер файла становится огромным
Gaurravs

8

Проверьте FIND() функцию в Excel.

Синтаксис:

FIND( substring, string, [start_position])

Возвращает, #VALUE!если не находит подстроку.


Да, вложенный в ISNUMBERэто также работает, только для чувствительных к регистру совпадений.
геотеория

1

Мне нравится Rink.Attendant.6 ответ. Я на самом деле хочу проверить наличие нескольких строк и сделал это следующим образом:

Сначала ситуация: имена, которые могут быть домостроителями или названиями сообществ, и мне нужно объединить строителей в одну группу. Для этого я ищу слово «строитель» или «строительство» и т. Д. Итак -

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

Добро пожаловать в ТАК. Вы должны прочитать о том, что дает хороший ответ .
геотеория

Я не понимаю, для чего это нужно ... он проверяет компоновщик дважды, когда, по-видимому, достаточно одного раза. Если он находит строителя, он возвращает строителя, иначе он возвращает сообщество. Конструкция слова нигде не появляется. Возможно что-то вроде =OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*construction*"))?
Fantabolous

Есть 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

Хороший способ повысить личную эффективность, но ценой воспроизводимости, я бы сказал :)
гео-теория

0

Это старый вопрос, но решение для тех, кто использует Excel 2016 или новее, состоит в том, что вы можете устранить потребность во вложенных структурах if, используя новое 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. Таким образом, общие знаменатели должны быть последними в списке. My IFSнужно было бы приказать, Surfing, Surfs, Surfчтобы он работал правильно (поменялся местами Surfingи Surfsтакже работал бы в этом простом примере), но Surfдолжен быть последним.


большинство будет хотеть способность if / else, другими словами значение по умолчанию. Добавление этой цитаты может расширить привлекательность вашего ответа: «Невозможно установить значение по умолчанию, если все тесты возвращают FALSE (т. Е. Значение, если false). Вместо этого введите TRUE для последнего теста, а затем значение, которое нужно вернуть как значение по умолчанию, если ЛОЖЬ "
Whitneyland

-3

Вот формула, которую я использую

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


Это проверяет, если "." включается в A1, и если да, возвращает ... количество символов, оставшихся в A1, начиная с "." Не уверен, что этот дополнительный расчет уместен здесь.
Оценка 'Eh' Бекон

В последнюю очередь, используйтеIFERROR(LEN(A1) - FIND(".", A1), 0)
Найджел Touch
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.