【发布时间】:2018-12-12 09:39:34
【问题描述】:
我有大约 4,000 行文本数据,共 21 列。下面的公式将返回单列中最常见的值:
{=INDEX(E6:E3876,MODE(IF(E6:E3876"",MATCH(E6:E3876,E6:E3876,0))))}
但是,我需要检查 E6:Y4000 范围内的所有单元格。 Excel 中有没有一种方法可以返回跨多列的表中最常见的非空白文本值?
【问题讨论】:
我有大约 4,000 行文本数据,共 21 列。下面的公式将返回单列中最常见的值:
{=INDEX(E6:E3876,MODE(IF(E6:E3876"",MATCH(E6:E3876,E6:E3876,0))))}
但是,我需要检查 E6:Y4000 范围内的所有单元格。 Excel 中有没有一种方法可以返回跨多列的表中最常见的非空白文本值?
【问题讨论】:
又快又脏的custom function 会比任何公式都快得多:
Function Freq(rng As Range) As String
Dim cll As Range
Dim lngCount As Long
Dim lngMax As Long
Dim str As String
Set dic = CreateObject("scripting.dictionary")
On Error Resume Next
For Each cll In rng
If cll.Value <> "" Then
dic(cll.Value) = dic(cll.Value) + 1
lngCount = dic(cll.Value)
If lngCount > lngMax Then
lngMax = lngCount
str = cll.Value
End If
End If
Next
On Error GoTo 0
Freq = str
End Function
【讨论】: