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

我想计数连续相同的值的频率。 该值必须占用至less两个单元格,并且必须彼此相邻。

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

J7:BE7是一个人input数值的地方 – 相当于时间,以30分钟递增。

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

这个公式在第一列DD7 – COUNTIF(J7:$ BE7,J7)

这个公式是在(最后一列)EY7 – COUNTIF(BE7:$ BE7,BE7)

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

scheme1:如果“橙色”只出现一次,则此公式非常有效。 在我的例子从K7:L7。

场景2:问题是当“橙色”再次出现在非连续的单元格上时。 我的意思是,K7:L7出现“橙色”,然后再次出现在P7:Q7上。

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

在场景2中,检查K7:L7的公式的结果是4,因为它也会计算K7:L7上出现的“橙色”。

我希望如果M7具有不同的值,计数将停止。 K7:L7包含“橙”,M7:N7包含“苹果”。 或者如果中间有一个空单元,计数将停止,如U7:V7包含“guava”,T7为空,则X7:Y7再次具有“番石榴”。

果实可能占据每行二至四十八列。

我知道这是罗嗦,但我找不到解释它的其他方法,英语不是我的第一个舌头。

先进的谢谢你。

〜标记

我同意这个问题本来可以好一点,但我想我明白你在找什么。 我想不出用内置的Excel函数做的一个好方法,但是如果你愿意稍微使用一下VBA,你可以创build一个自定义的函数,就像它是一个普通的函数一样在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 

这个函数查看你传递的单元格作为参数,然后查看右边的单元格,直到它find一个不同的单元格,并计算它遇到的相同单元格的数量。 例如,如果单元格A1-C1全部为“Bob”,D1为空白或具有不同的值,那么如果在单元格A2中放置=NumInARow(A1) ,则A2将显示值3.您可以拖动该公式沿着整个细胞。 如果它所查看的单元格不是序列中的第一个单元格,或者它正在查看的单元格是空白的,则该公式将单元格留空。 例如,如果从上述场景=NumInARow(B1)放入单元格B2中,则B2将显示为空,因为第二个“Bob”不是序列中的第一个。 我希望别人可以想办法用内置的Excel函数做到这一点,但这可能是一个select。 下面是一篇WikiHow文章,向您展示如何制作/放置用户定义的函数。 如果你已经有了代码,这很简单。

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

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

线程可以在这个链接中find:

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


这是他的话的逐字:


如果我正确理解您的请求,下面的公式将工作。 我的解决scheme需要一个虚拟列和一个助手行,但可以隐藏。 此外,你可以用一点工作来消除虚拟列,你可以把帮助行放在任何地方。

我假设你的客户端名称在第2行。我将使用列A作为虚拟列,所以约会数据从列B开始。第3行将是助手行。 在B3单元格中input公式:

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

含义:

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

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

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

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

谢谢大家的帮助。

最好的祝福,

〜标记