У меня есть решение здесь, но это некрасиво.
Проблема, как я указываю в своем комментарии, заключается в том, что Excel не имеет внутренней функции, чтобы увидеть, содержит ли ячейка «точное соответствие». Вы можете проверить, является ли полное значение в ячейке точным совпадением, но вы не можете проверить, был ли этот термин спрятан таким образом. Итак, нам нужно создать специальный метод, который проверяет каждое «приемлемое» окончание на слово. На мой взгляд, это будет все, что заканчивается пространством, все, что заканчивается пунктуацией, и все, что находится в конце ячейки без ничего после нее.
ARRAY ФОРМУЛА
Вы были на правильном пути с LEN - метод ЗАМЕНЫ, но формула должна быть формула массива работать. Формулы массива вычисляют одно и то же несколько раз по заданному диапазону ячеек, а не только один раз. Они разрешают вычисление для каждой отдельной ячейки в формуле и предоставляют массив результатов. Этот массив результатов должен быть свернут вместе, чтобы получить единый общий результат.
Рассмотрим следующим образом:
=LEN(C1:C6)
Подтвердить эту формулу с CTRL + SHIFT + ENTER, а не только ENTER. Это дает нам LEN C1, за которым следуют C2, C3 ... и т. Д., В результате получается массив результатов, который выглядит следующим образом [предположим, что C1 имеет «a», C2 имеет «aa», C3 имеет «a», C4 имел «», С5 был «ААА», и С6 имел «»]:
={1;2;1;0;3;0}
Для того, чтобы получить, что в качестве одного числа, обеспечивающего общую длину каждой клетки в отдельности, обернуть, что в функции SUM: = SUM (LEN (C1: C6))
Подтверждено снова с помощью CTRL + SHIFT + ENTER вместо ENTER. Это приводит к общей длине всех ячеек: 7.
, задающий Четк.совп
Теперь взять ваш вопрос, вы хотите найти все «приемлемые» матчи данного слова B1, в пределах текст A1. Как я уже говорил, мы можем определить приемлемый ответ как тот, который заканчивается пунктуацией, пробелом или концом ячейки. Что-то в конце ячейки - это особый случай, который мы рассмотрим позже. Сначала рассмотрим приведенную ниже формулу. В ячейках C1: C6 я вручную набрал запятую, период, точку с запятой; дефис, пробел и косую черту. Это будут «приемлемые» способы положить конец слову, найденному в B1.
=LEN(SUBSTITUTE(A1,B1&C1:C6,""))
Подтвержденный с CTRL + SHIFT + ENTER, это принимает длину замещения для термина поиска в B1 с добавленным приемлемого слова-конец в C1: C6. Таким образом, он дает длину для 6 новых ЗАМЕСТНЫХ слов. Но, как это массив результатов, нам нужно добавить их вместе, чтобы получить один номер, например:
=SUM(LEN(SUBSTITUTE(A1,B1&C1:C6,"")))
FORMULIZING РЕЗУЛЬТАТ
Для работы как у вас есть в вашем предложении, теперь нам нужно будет вычесть эту длину из длины исходного слова. Обратите внимание, что существует проблема с этим просто: поскольку мы много раз искали, нам нужно будет добавить длину исходного слова несколько раз. Рассмотрим что-то вроде этого:
=LEN(A1)-SUM(LEN(SUBSTITUTE(A1,B1&C1:C6,"")))
Это не будет работать, потому что это только добавляет длину A1 один раз, но он вычитает длину замещенных строк несколько раз. Как насчет этого?
=LEN(A1)*6-SUM(LEN(SUBSTITUTE(A1,B1&C1:C6,"")))
Это работает, потому что есть 6 слово конец термины мы ищем с C1: C6, поэтому замена будет происходить в 6 раз. Таким образом, у нас есть первоначальная длина слова 6 раз, а длина каждого замещаемого слова 6 раз (помните, что если нет соответствия, скажем, «картофеля», тогда этот термин даст длину оригинала слово, тем самым отрицая одно из времен, когда мы добавили длину этого слова, как и ожидалось].
Чтобы завершить это, нам нужно разделить на количество букв в поисковом выражении. Имейте в виду, что там, где у вас есть «/ LEN (B1)», нам нужно будет добавить символ для длины каждого из наших слов.
=(LEN(A1)*6-SUM(LEN(SUBSTITUTE(A1,B1&C1:C6,""))))/(LEN(B1)+1)
Наконец, нам нужно добавить специальный случай, когда последняя часть A1 равна поисковому запросу без словарного конца. В одиночку это было бы:
=IF(RIGHT(A1,LEN(B1))=B1,1,0)
Это даст нам 1, если последняя часть A1 равен B1, в противном случае она дает 0. Итак, теперь просто добавить это к нашей предыдущей формуле, следующим образом:
=(LEN(A1)*6-SUM(LEN(SUBSTITUTE(A1,B1&C1:C6,""))))/(LEN(B1)+1)+IF(RIGHT(A1,LEN(B1))=B1,1,0)
Не забудьте подтвердить с помощью CTRL + SHIFT + ENTER, а не просто ENTER. Вот и все, теперь он дает вам счет всех «точных совпадений» вашего поискового запроса.
АЛЬТЕРНАТИВНЫЙ ПОДХОД К ARRAY ФОРМУЛЫ
Обратите внимание, что вместо того, чтобы использовать C1: C6, вы могли бы вместо того, чтобы жёстко вашу формулу для поиска специфической пунктуации как слово конец. Это будет сложнее поддерживать, но, на мой взгляд, так же читаемо. Он будет выглядеть следующим образом:
=(LEN(A1)*6-SUM(LEN(SUBSTITUTE(A1,B1&{",",".",";"," ","/","-"},""))))/(LEN(B1)+1)+IF(RIGHT(A1,LEN(B1))=B1,1,0)
Это еще технически «формула массива», и она работает на тех же принципах, как я описал выше. Однако одно преимущество заключается в том, что вы можете подтвердить этот тип записи только с помощью ENTER. Это хорошо, если кто-то случайно редактирует вашу ячейку и нажимает ENTER, не замечая. В противном случае это эквивалентно формату выше.
Сообщите мне, если вы хотите, чтобы какая-либо часть этого была разработана.
Во-первых, я укажу, что часть SUMPRODUCT вашей формулы не по всей видимости, делать что-либо, так что можно удалить и упростить, как вещи выглядят несколько. Что касается того, как решить вашу проблему, в Excel нет ничего, чтобы распознавать «целые слова в ячейке», подобные этому как полезную функцию, поэтому вам нужно будет немного подкорректировать. Не могли бы вы пояснить, какие слова будут появляться? Может быть так же просто, как добавить «-count для тех, которые заканчиваются на s» до конца вашей формулы. –
Я удалил 'Sumproduct', спасибо за отзыв. Я буду анализировать большие части текстов. Например - текст о собаках. Слова, которые включает текст, это «собака», «собака», «собака», «собачьи», «собачьи» и «собачьи». И я хочу рассчитать, сколько раз в тексте упоминается «собака». –
Вы посмотрели мой ответ ниже? Он должен делать то, что вы хотите. Дайте мне знать, если у вас есть вопросы о том, как это работает. –