我想计算一行中相同值的频率。该值必须至少占用两个单元格,并且必须彼此相邻。
我想在这里发布图片,但我没有足够的声誉。无论如何,截图可以在这里找到: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列。我知道这很啰嗦,但我无法找到解释它的其他方法,英语不是我的第一语言。
先谢谢你。
〜标记
答案 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,显示此约会中有多少个时隙(半小时)。否则,显示空白。
你可以在我提供的链接上找到更多他的答案。
感谢大家的帮助。
最诚挚的问候,
〜标记