计数Excelstring中的词的频率
假设我有一个任意长度的列,每个单元格包含一个文本string。 有没有办法确定哪些单词出现在列中最频繁(不知道哪些单词要检查),然后将这些单词连同它们的频率排列在一个双列表中? VBA最适合这个任务吗?
例如,单元格可能包含string“这是一个string,并且该string中的字符数> 0”。 (故意的错误)
select列A的一部分,并运行这个小macros(表格将被放置在列B & C :
Sub Ftable() Dim BigString As String, I As Long, J As Long, K As Long BigString = ""
'添加代码来总结“全部”和“全部”'添加代码以分开“。” “!” 从前面的单词中去掉,这样“单词”也算在总数中。 例如:“全部”。 不应该被报告为“全部”。 但“所有”字的总数加上“全部”。 “你会发布这个新的代码?
For Each r In Selection BigString = BigString & " " & r.Value Next r BigString = Trim(BigString) ary = Split(BigString, " ") Dim cl As Collection Set cl = New Collection For Each a In ary On Error Resume Next cl.Add a, CStr(a) Next a For I = 1 To cl.Count v = cl(I) Cells(I, "B").Value = v J = 0 For Each a In ary If a = v Then J = J + 1 Next a Cells(I, "C") = J Next I End Sub
鉴于这种:
我将使用数据透视表来得到这个:
最好的部分是,如果我得到更多,很容易得到前5名,10名等,而且总是会导致独特的指标。 从那里,你可以做的所有编辑和计算的方式。 🙂
使用Google表格:
index((Transpose(ArrayFormula(QUERY(TRANSPOSE(SPLIT(JOIN(" ",$B$2)," ")&{"";""}),"select Col1, count(Col2) group by Col1 order by count(Col2) desc limit 20 label Col1 'Word', count(Col2) 'Frequency'",0)))),1,$A6+1)&":"&index((Transpose(ArrayFormula(QUERY(TRANSPOSE(SPLIT(JOIN(" ",$B$2)," ")&{"";""}),"select Col1, count(Col2) group by Col1 order by count(Col2) desc limit 20 label Col1 'Word', count(Col2) 'Frequency'",0)))),2,$A6+1)
在上面$ B $ 2包含文本string
$ A6 = 1会给你最常用的单词
$ A6 = 2会给你第二常用的单词等
这是最常见的20个。 如果您想要更多,请将限制值增加到您想要的值。