В столбике есть овер 100500 ячеек с предложениями из 2-3 слов. Нужно из всех этих ячеек найти слова, которое чаще всех повторяются. И сделать мини-рейтинг из ТОП 300 таких слов.
Пример не получается прилепить к письму, т.к. файл слишком большой, а на маленьком показывать не интересно
Добрый день, многоуважаемые!
В столбике есть овер 100500 ячеек с предложениями из 2-3 слов. Нужно из всех этих ячеек найти слова, которое чаще всех повторяются. И сделать мини-рейтинг из ТОП 300 таких слов.
Пример не получается прилепить к письму, т.к. файл слишком большой, а на маленьком показывать не интересно AdwordsDirect
Сообщение отредактировал AdwordsDirect - Вторник, 07.03.2017, 12:37
вариант макроса (работает на выделенном диапазоне): [vba]
Код
Sub WordsRating() Dim data As Range, i&, temp, cell, dic As Object, res As Worksheet Dim dKeys, dItems If Not Intersect(ActiveSheet.UsedRange, Selection) Is Nothing Then If Selection.Count > 1 Then Set data = Intersect(ActiveSheet.UsedRange, Selection) Else Set data = Selection End If Set dic = CreateObject("scripting.dictionary") For Each cell In data temp = Split(cell, " ") If UBound(temp) >= 0 Then For i = 0 To UBound(temp) If Trim(temp(i)) <> "" Then dic(Trim(temp(i))) = dic(Trim(temp(i))) + 1 Next i End If Next cell Set res = ActiveWorkbook.Sheets.Add With res dKeys = dic.keys dItems = dic.items For i = 0 To UBound(dKeys) .Cells(i + 1, 1).Value = dKeys(i) .Cells(i + 1, 2) = dItems(i) Next i .Sort.SortFields.Clear .Sort.SortFields.Add Key:=Range("b1:b" & i) _ , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With .Sort .SetRange Range("A1:B" & i) .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With If UBound(dKeys) >= 300 Then .Range("a301:b" & i).ClearContents End With End If End Sub
вариант макроса (работает на выделенном диапазоне): [vba]
Код
Sub WordsRating() Dim data As Range, i&, temp, cell, dic As Object, res As Worksheet Dim dKeys, dItems If Not Intersect(ActiveSheet.UsedRange, Selection) Is Nothing Then If Selection.Count > 1 Then Set data = Intersect(ActiveSheet.UsedRange, Selection) Else Set data = Selection End If Set dic = CreateObject("scripting.dictionary") For Each cell In data temp = Split(cell, " ") If UBound(temp) >= 0 Then For i = 0 To UBound(temp) If Trim(temp(i)) <> "" Then dic(Trim(temp(i))) = dic(Trim(temp(i))) + 1 Next i End If Next cell Set res = ActiveWorkbook.Sheets.Add With res dKeys = dic.keys dItems = dic.items For i = 0 To UBound(dKeys) .Cells(i + 1, 1).Value = dKeys(i) .Cells(i + 1, 2) = dItems(i) Next i .Sort.SortFields.Clear .Sort.SortFields.Add Key:=Range("b1:b" & i) _ , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With .Sort .SetRange Range("A1:B" & i) .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With If UBound(dKeys) >= 300 Then .Range("a301:b" & i).ClearContents End With End If End Sub