MS Excel:计算空白单元格之间相似值的频率

时间:2014-09-02 21:49:47

标签: excel frequency countif

我想计算一行中相同值的频率。该值必须至少占用两个单元格,并且必须彼此相邻。

我想在这里发布图片,但我没有足够的声誉。无论如何,截图可以在这里找到:https://www.dropbox.com/s/1em9ltssc1ruw0u/stackOverflow_excelIssue_Countfrequencyofsimilarvaluesinbetweenblankcells.jpg?dl=0

J7:BE7是一个人输入值的地方 - 它对应于时间,以30分钟为增量。

在同一张纸的另一部分,在这种情况下,DD7:EY7是我运行公式的地方。

此公式已打开(第一列)DD7 - COUNTIF(J7:$ BE7,J7)

此公式已开启(最后一栏)EY7 - COUNTIF(BE7:$ BE7,BE7)

DD7上的公式计算J7上的值从第J行到第J行出现的次数。

方案1:如果" orange"只会出现一次。在我的例子中来自K7:L7。

方案2:问题是" orange"再次出现在非连续的细胞上。我的意思是,"橙"出现在K7:L7上,然后它再次出现在P7:Q7上。

在方案1中,检查K7:L7的公式结果为2,这是期望值。

在方案2中,检查K7:L7的公式结果为4,因为它也会计算" orange"出现在K7:L7。

我希望如果M7有不同的值,计数将停止。 K7:L7包含"橙"和M7:N7有" apple"。或者,如果中间有一个空单元格,则计数将停止,例如U7:V7包含"番石榴",并且T7为空,然后X7:Y7再次具有"番石榴"

每个果实可能占据每排2至48列。

我知道这很啰嗦,但我无法找到解释它的其他方法,英语不是我的第一语言。

先谢谢你。

〜标记

2 个答案:

答案 0 :(得分:2)

我同意这个问题的措辞可能会好一些,但我想我明白你在寻找什么。我无法想到使用内置Excel函数的好方法,但是如果你愿意稍微使用VBA,你可以创建一个你可以使用的自定义函数,就像它是一个普通的函数一样在Excel中。您只需要将这样的内容添加到新模块中:

Public Function NumInARow(r As Range) As Variant
Dim i As Integer
If r.Value = "" Or r.Value = Empty Then
    NumInARow = ""
    Exit Function
End If
If r.Column > 1 Then
    If r.Offset(0, -1).Value = r.Value Then
        NumInARow = ""
        Exit Function
    End If
End If
i = 1
Do While r.Offset(0, i).Value = r.Value
    i = i + 1
Loop
NumInARow = i
End Function

此函数查看作为参数传递的单元格,并查看右侧的单元格,直到找到不同的单元格并计算它遇到的相同单元格的数量。例如,如果单元格A1-C1都表示“Bob”且D1为空或具有不同的值,则如果将=NumInARow(A1)放在单元格A2中,则A2将显示值3.您可以拖动该公式整个细胞。如果正在查看的单元格不是序列中的第一个单元格,或者它正在查看的单元格是空白的,则公式将单元格留空。例如,如果从上面的场景中将=NumInARow(B1)放入单元格B2,则B2将显示为空白,因为第二个“Bob”不是序列中的第一个。我希望其他人可以通过内置的Excel函数来想办法,但这可能是你的选择。这是WikiHow的一篇文章,向您展示如何设置/放置用户定义的函数。如果您已经拥有代码,那就非常简单了。

http://www.wikihow.com/Create-a-User-Defined-Function-in-Microsoft-Excel

答案 1 :(得分:1)

我接受的答案 - 使用公式 - 来自superuser.com的G-Man

可以在此链接上找到该主题:

MS Excel:计算空白单元格中相似值的频率 https://superuser.com/questions/806427/ms-excel-count-frequency-of-similar-values-in-between-blank-cells


这是他的话的逐字记录:


如果我理解您的请求,以下公式将起作用。我的解决方案需要一个虚拟列和一个辅助行,但它们可以隐藏。此外,您可以通过一些工作消除虚拟列,并且可以将辅助行放在任何位置。

我假设您的客户端名称在第2行。我将使用列A作为虚拟列,因此约会数据从列B开始。第3行将是帮助行。在单元格B3中,输入公式:

= IF(B2 =“”,“”,IF(B2< C2>,C3 + 1))

含义:

如果B2 =“”,则此时间段的客户端名称为空,因此这是一个空闲时间段,因此显示为空白。 否则,如果B2<> C2,则该时隙和下一个具有不同的客户端(C2可能是空白也可能不是空白),因此这是该约会的最后时隙。将其表示为1.否则,向后计数,因此此约会的倒数第二个时隙为2,倒数第三个时隙为3,等等。 在单元格B4中,输入:

= IF(A2< B2> B3,“”)

如果A2<> B2,该时隙和前一个时隙具有不同的客户端(A2可能是空白也可能不是空白),因此这是该约会的第一个时隙。显示B3,显示此约会中有多少个时隙(半小时)。否则,显示空白。

你可以在我提供的链接上找到更多他的答案。

感谢大家的帮助。

最诚挚的问候,

〜标记