范围内最频繁的单词,忽略空白

时间:2014-11-11 15:44:01

标签: excel formula mode

我目前使用以下公式查找范围内最常见的字词或数字:

=INDEX(E9:E18,MODE(MATCH(E9:E18,E9:E18,0)))

但是,如果有任何空白单元格,则公式将返回一个空白单元格作为模式。如何修改它以找到忽略任何空白单元格的最常用单词/数字?

非常感谢

2 个答案:

答案 0 :(得分:6)

尝试以下用户定义的功能:

Public Function MostFreq(rIn As Range) As Variant
    Dim c As Collection, r As Range, N As Long, How()
    Dim cc As Long, wf As WorksheetFunction
    Dim i As Long, Biggest As Long
    Set c = New Collection
    Set wf = Application.WorksheetFunction

    On Error Resume Next
    For Each r In rIn
        v = r.Text
        If v <> "" Then
        c.Add v, CStr(v)
        End If
    Next r

    On Error GoTo 0
    cc = c.Count
    ReDim How(1 To cc)

    For i = 1 To cc
        How(i) = wf.CountIf(rIn, c.Item(i))
    Next i
    Biggest = wf.Max(How)
    For i = 1 To cc
        If How(i) = Biggest Then
            MostFreq = c.Item(i)
        End If
    Next i
End Function

要避免 VBA,选择一个单元格(例如 A1 )并输入数组公式:

=INDEX(E9:E18,MODE(IF((E9:E18<>"")*ISNA(MATCH(E9:E18,$B$1:$B1,0)),MATCH(E9:E18,E9:E18,0))))
必须使用 Ctrl + Shift + 输入输入

数组公式,而不仅仅是 Enter key。

以下是一个例子:

sdfgh

答案 1 :(得分:0)

我有同样的问题,但是还有一个额外的问题,就是需要容纳可能具有0、1或2个值的范围。每当值小于三个时,this other answer to this question中的公式以及this related question中的所有公式都会导致#N/A错误。

但是此公式解决了该问题:

=INDIRECT(TEXT(MIN(IF(COUNTIF(Rng,Rng)=MAX(COUNTIF(Rng,Rng)),10^5*ROW(Rng)+COLUMN(Rng))),"R0C00000"),0)

Source。消息人士说,需要使用 control + shift + enter 作为数组公式输入,但是在我的范围中也可以不使用它,都是单列。

如果该范围内没有值,那么当我需要空白时,上面的公式将产生零,因此我对其进行了如下修改:

=IF(
    INDIRECT(TEXT(MIN(IF(COUNTIF(rng,rng)=MAX(COUNTIF(rng,rng)),10^5*ROW(rng)+COLUMN(rng))),"R0C00000"),0)=0,
    "",
    INDIRECT(TEXT(MIN(IF(COUNTIF(rng,rng)=MAX(COUNTIF(rng,rng)),10^5*ROW(rng)+COLUMN(rng))),"R0C00000"),0)
)

上面的INDIRECT公式会产生一个单元格引用,因此该公式将不在该范围所在的图纸之外起作用。如果要在Sheet1中使用此功能,例如在Sheet2中使用它,则必须向该范围为以下位置的工作表中添加一个引用:

=IF(
    INDIRECT("Sheet1!"&TEXT(MIN(IF(COUNTIF(rng,rng)=MAX(COUNTIF(rng,rng)),10^5*ROW(rng)+COLUMN(rng))),"R0C00000"),0)=0,
    "",
    INDIRECT("Sheet1!"&TEXT(MIN(IF(COUNTIF(rng,rng)=MAX(COUNTIF(rng,rng)),10^5*ROW(rng)+COLUMN(rng))),"R0C00000"),0)
)