2015-07-29 3 views
1

В Microsoft Excel я хочу рассчитать частоту конкретного слова в ячейке. Ячейка содержит несколько предложений. Я сейчас использую формулу, которая работает, но не так, как я ее хочу.Подсчитайте частоту определенного слова в одной ячейке

А1

my uncle ate potatos. potato was his favorite food. Don't mash the potato, just keep it simple. 

В1 (слово, чтобы подсчитать частоту)

potato 

С1 (forumula)

=(LEN(A2)-LEN(SUBSTITUTE(A2;B2;"")))/LEN(B2) 

C1 Результаты:

3 

В С1, я получаю счет 3. Я хочу это просто быть 2. Таким образом, формула подсчета potatos.

Как сделать функцию только для подсчета точных совпадений?

+0

Во-первых, я укажу, что часть SUMPRODUCT вашей формулы не по всей видимости, делать что-либо, так что можно удалить и упростить, как вещи выглядят несколько. Что касается того, как решить вашу проблему, в Excel нет ничего, чтобы распознавать «целые слова в ячейке», подобные этому как полезную функцию, поэтому вам нужно будет немного подкорректировать. Не могли бы вы пояснить, какие слова будут появляться? Может быть так же просто, как добавить «-count для тех, которые заканчиваются на s» до конца вашей формулы. –

+0

Я удалил 'Sumproduct', спасибо за отзыв. Я буду анализировать большие части текстов. Например - текст о собаках. Слова, которые включает текст, это «собака», «собака», «собака», «собачьи», «собачьи» и «собачьи». И я хочу рассчитать, сколько раз в тексте упоминается «собака». –

+0

Вы посмотрели мой ответ ниже? Он должен делать то, что вы хотите. Дайте мне знать, если у вас есть вопросы о том, как это работает. –

ответ

2

У меня есть альтернативное решение для вас рассматривать. Я занимаю немного больше места, и формулы немного запутаны, но в некоторых смыслах это будет проще.

Используйте столбец C в качестве новой вспомогательной колонки. Столбец C примет текст из столбца A и заменит все экземпляры знаков препинания на «». Как только это будет сделано, формула для подсчета экземпляров поискового термина из столбца B будет простой формулой, по существу, как у вас в вашем OP.

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,","," "),"."," "),";"," "),"-"," "),"/"," ") 

Эта формула первая заменяет все слеши для пространств, то с этим замещенным текстом заменяет черточки для пространств, то с этим substited текстом он заменяет запятую с пробелами и т.д. Как вы указали, если вы используете точку с запятой как разделители, вам нужно будет заменить мои разделители запятыми на полуколоны.

Тогда формула в D1 - это просто то, что у вас выше в вашем OP, с двумя изменениями: мы будем искать B1 & «», потому что мы знаем, что все «точные соответствия» теперь заканчиваются пробелами, и мы будет добавлен дополнительный «1», если последняя часть текста в C1 совпадает с поисковым термином в B1, потому что, если ячейка заканчивается этим словом, у нее не будет пробела, но она по-прежнему остается 'полное совпадение'. Как так:

=(LEN(C1)-LEN(SUBSTITUTE(C1,B1&" ","")))/(LEN(B1)+1)+IF(RIGHT(C1,LEN(B1))=B1,1,0) 

EDIT

Мой список пунктуации было только предложение; Я рекомендую вам действительно пройти через образец текста и убедиться, что у вас нет никаких странных символов после слов. Кроме того, рассмотрите возможность изменения необычных я имею (например, «/» или «-») с помощью?? или "!". Если вы хотите добавить еще, просто следуйте шаблону формулы SUBSTITUTE.

Чтобы сделать этот регистр нечувствительным, вам просто нужно изменить формулу в столбце C, чтобы сделать результат в нижнем регистре, а затем обеспечить, чтобы ваши условия поиска в столбце B были строчными. Изменение столбца C следующим образом:

=LOWER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,","," "),"."," "),";"," "),"-"," "),"/"," ")) 
+0

Большое спасибо за то, что нашли время. Изменены запятые для полуколоней. Формула в C1 работает, пунктуация удаляется. Но в D1 я получаю '4,375', используя тот же контент в A1, что и мой orgininal post. Будет ли это решение работать, если у меня много строк? Например, в A1 у меня есть текст о картофеле, а в A2 у меня есть текст о собаках. –

+0

@LiuKang У вас есть скобка вокруг числителя? Единственный способ, которым я мог видеть, что число было таким большим, - это то, что вся числительная часть не делится на (LEN (B1) +1). –

+1

Кроме того, вам нужно будет сделать эту формулу для каждой строки - вы можете перетащить эту формулу столько раз, сколько хотите, до тех пор, пока столбец A всегда включает в себя «искомый» текст, столбец B всегда включает «термин поиска», и столбец C всегда содержит замененный текст поиска. –

3

У меня есть решение здесь, но это некрасиво.

Проблема, как я указываю в своем комментарии, заключается в том, что 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, не замечая. В противном случае это эквивалентно формату выше.

Сообщите мне, если вы хотите, чтобы какая-либо часть этого была разработана.

+0

Заменили запятые ',' с помощью запятой ';', но получив 0 в C1. –

+0

Вы подтвердили с помощью CTRL + SHIFT + ENTER или просто ENTER? Вы вводили знаки препинания в C1: C6? Я протестировал это, чтобы он работал, если отформатирован правильно. –

0

Вам нужна эта формула? У меня есть идея, но это требует нескольких (relaitvely простых) шагов.

Поскольку у вас есть длинное предложение в A1, как насчет перехода в Data -> Text to Columns и отправить это предложение в строку, ограниченную пробелами. Затем удалите любые знаки препинания. Тогда просто сделайте простой Countif()?

Поместите данные в A1, а затем перейти к данным -> Текст по столбцам, выберите "разделителями", нажмите кнопку Далее, выберите "Space":

enter image description here

Нажмите кнопку Готово, и это Поместите всю вещь в строку 1 со словом в каждой ячейке. Теперь просто найдите/замените "." и "," ни с чем.

Затем, Countif на помощь!

enter image description here

Если это работает, мы можем автоматизировать в VB, так что вам не придется вручную найти/заменить puncutation. Прежде чем я вникаю в это, работает ли этот метод?

+0

Спасибо за ваш ответ. Извините, но я думаю, что это не сработает. Я использую это для анализа больших частей текстов, некоторые из них будут более 500 слов (много столбцов с вашим решением), и это может быть 100 строк текста. Плюс я буду анализировать более одного слова, может быть, 10. –

+0

Если вышеописанное работает с одним или двумя предложениями, оно может работать с сотнями, особенно если мы используем VBA для выполнения этой работы. – BruceWayne

-1

Возьмите длину строки и минус длина строки с ключевым словом заменены ничем затем разделить результат на длину ключевого слова:

=(LEN(A1)-LEN(SUBSTITUTE(A1,B1,"")))/LEN(B1) 
+0

Используя эту формулу на 'potatos. картофельный картофель 'Я все еще получаю' 3', а не '2'. –

+0

Да, похоже, эта формула идентична той, которая первоначально была представлена ​​в ОП. –

+0

Почему вы не проверяете правую дорожку до начала опроса. –

Смежные вопросы