Страницы: 1
RSS
Извлечение слов из текста
 
Здравствуйте, друзья!

Помогите, пожалуйста!


В столбце А размещены фразы.
В столбце B нужно (прошу не относить данное слово на свой счет) вывести уникальные слова из фраз, размещенных в столбце A.
В столбце C выводится количество вхождений слов из столбца B во фразах из столбца A.

Спасибо.
Изменено: AB1 - 21.04.2017 14:58:16
 
Прошу прощения, забыл добавить:



В столбце E нужно подсчитать суммарное количество символов для фраз из столбца A, в которых содержатся слова из столбца C.
Изменено: AB1 - 21.04.2017 15:22:50
 
Для суммы символов. Формула массива.
Код
=СУММ(ЕЧИСЛО(ПОИСК(C2;$A$2:$A$9))*ДЛСТР($A$2:$A$9))
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Bema, спасибо большое!
 
AB1, пожалуйста. А в одной ячейке слова могут повторяться? Например так "автомобили красные автомобили". И какое максимальное количество слов в ячейке?
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Bema, в одной ячейке слова не повторяются, максимальное количество - 10.
 
Цитата
AB1 написал:
максимальное количество - 10.
Это капец :D !!!
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Забыл отметить, что одно слово не может быть частью другого:

по слову "били" не должны учитываться вхождения в слове "автомобили".
Изменено: AB1 - 21.04.2017 16:17:02
 
Цитата
Bema написал:
Это капец  !!!
Bema, если для реализации функционала с максимальным количеством слов в ячейке=10 требуется много времени, с благодарностью приму пример с меньшим количеством слов :)  
Изменено: AB1 - 21.04.2017 18:45:00
 
Цитата
В столбце B нужно (прошу не относить данное слово на свой счет) вывести уникальные слова из фраз, размещенных в столбце A.
Код
Sub iWords()
Dim i As Long
Dim iLastRow As Long
Dim n As Integer
Dim j As Integer
Dim MyArr
 iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
   With CreateObject("scripting.dictionary"): .comparemode = 1
       n = 2
     For i = 2 To iLastRow
       MyArr = Split(Cells(i, "A"), " ")
         For j = 0 To UBound(MyArr)
           If Not .exists(MyArr(j)) Then    'если нет слова, то добавляем его в словарь и в столбец B
             .Add MyArr(j), 1
             Cells(n, "B") = MyArr(j)
             n = n + 1
           End If
         Next
     Next
   End With
    iLastRow = Cells(Rows.Count, "B").End(xlUp).Row
    Range("B1:B" & iLastRow).Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes
End Sub
 
Kuzmich, огромное вам спасибо!
Вечером проверю ваше решение.
 
Не получается добавить макрос:
 
AB1, такое бывает при вставке напрямую с форума в ВБА. Попробуйте скопипастить в блокнот, а оттель скопипастить в ВБА. Если не получится, то наберите проблемные строки вручную.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Попробуйте копировать код макроса и вставлять при русской раскладке клавиатуры
 
Цитата
JayBhagavan написал:
AB1 , такое бывает при вставке напрямую с форума в ВБА. Попробуйте скопипастить в блокнот, а оттель скопипастить в ВБА.
Цитата
Kuzmich написал:
Попробуйте копировать код макроса и вставлять при русской раскладке клавиатуры
Оба варианта не помогли, макрос заработал после того, как удалил пробелы в начале строк.
Kuzmich, спасибо, макрос работает идеально!
 
Цитата
Bema написал: =СУММ(ЕЧИСЛО(ПОИСК(C2;$A$2:$A$9))*ДЛСТР($A$2:$A$9))
Не сразу заметил, что данный вариант считает любые вхождения слова в ячейке, а нужно, чтобы при подсчете не учитывались вхождения одного слова в другие.
Изменено: AB1 - 23.04.2017 16:53:58
 
Цитата
нужно, чтобы при подсчете не учитывались вхождения одного слова в другие.
Приведите пример и что должно получится.
 
Пример во вложении содержит корректные данные в столбцах F и G.
 
А сумма символов в столбце G разве такая должна быть?
 
Слово "А" содержится в столбце A один раз, длина слова - 1 символ,
Слово "били" содержится в столбце A один раз, длина слова - 4 символа.
 
Может я не так понял, но вы писали
Цитата
В столбце E нужно подсчитать суммарное количество символов для фраз из столбца A, в которых содержатся слова из столбца C.
 
Да, верно, но затем уточнил:
Цитата
AB1 написал: Забыл отметить, что одно слово не может быть частью другого:
по слову "били" не должны учитываться вхождения в слове "автомобили".
 
Например Дети - сумма символов 16, как тогда?
 
Вы правы, нужно считать сумму символов фраз, а не слова, извините, ошибся :)  
Изменено: AB1 - 23.04.2017 19:01:01
 
Цитата
по слову "били" не должны учитываться вхождения в слове "автомобили".
Пытаюсь выделить слова с помощью регулярных выражений, но что-то не получается
 
Есть такой вариант:
 
Варинат без доп.столбцов:

количество вхождений (обычная)
=СУММПРОИЗВ(ЕСЛИ(ЕЧИСЛО(НАЙТИ(ПРОПНАЧ($C2)&" ";ПРОПНАЧ($A$2:$A$6)&" "));$B$2:$B$6))
длина фраз с вхожениями (массивная):
=СУММ(ЕСЛИ(ЕЧИСЛО(НАЙТИ(ПРОПНАЧ($C2)&" ";ПРОПНАЧ($A$2:$A$6)&" "));$B$2:$B$6))
F1 творит чудеса
 
Максим Зеленский, спасибо, оба варианта отлично работают для подсчета к-ва символов (массив.), но не для подсчета вхождений:
 
сорри, опечатался. первая формула такая (обычная):
=СУММПРОИЗВ(--ЕЧИСЛО(НАЙТИ(ПРОПНАЧ($C2)&" ";ПРОПНАЧ($A$2:$A$6)&" ")))
вторая (обычная):
=СУММПРОИЗВ(--ЕЧИСЛО(НАЙТИ(ПРОПНАЧ($C2)&" ";ПРОПНАЧ($A$2:$A$6)&" "));$B$2:$B$6)
F1 творит чудеса
 
Максим Зеленский, большое спасибо, теперь все работает без доп. столбцов!
Изменено: AB1 - 24.04.2017 14:40:03
Страницы: 1
Наверх