计算阈值以下的组(Microsoft Excel)
Ronald将一系列信号值测量值作为一系列值导入Excel。他需要计算该系列中存在多少个连续的值组,且这些组值均低于某个阈值。例如,他可能具有以下度量:
27, 22, 22, 30, 32, 18, 22, 23, 28, 39, 24, 27, 35, 25, 21
如果他想知道那些分组的成员在26岁以下的分组的数目,答案将是4。请注意,这是连续值在26以下的分组,而不是在26以下的单个值的数目。情况下,将在下面的括号中显示四个分组:
27, [22, 22], 30, 32, [18, 22, 23], 28, 39, [24], 27, 35, [25, 21]
罗纳德(Ronald)想知道他可以使用哪种公式来计算落入他可能指定的任意阈值以下的分组数量。
实际上,您可以采用几种不同的方法来解决此问题。第一种是使用“结果列”,该列实际上记录了阈值和序列分组的变化。例如,如果您在工作表的A列(从单元格A2开始)中具有上述值,而在单元格E1中具有阈值,则可以在A列中值右侧的每个单元格中使用以下公式:
=IF(A2>=$E$1,B1,IF(A1<$E$1,B1,B1+1))
||||该公式使各组的运行总和保持在阈值以下。 B列的最大值(或最后一个值)提供了低于阈值的组总数。公式将检查以查看A列中紧靠左侧的值是高于还是低于阈值。
如果它在上面,或者不在上面,并且列A中的前一个值也在下面,那么它不会增加运行总和。否则,它会增加,因为开始了新的分组。
一种相关的计数方法是在B列中使用此公式,而不是:
=IF(A2>=$E$1,0,IF(A1<$E$1,0,1))
这将导致B列包含一系列0或1值。出现1值的唯一时间是在低于阈值的系列开始时。这样就很容易对B列中的所有值求和,从而提供了分组计数。
如果您不想使用结果列,则可以使用数组公式来计算计数。再次,以下公式假定要分析的值在A列中(从A2开始),并且阈值在单元格E1中。同样要记住,通过按Ctrl + Shift + Enter输入数组公式。
=SUM(IF((A2:A16<$E$1)((A2:A16((A1:A15<$E$1)ISNUMBER(A1:A15))),1))
该公式基本上会执行以前的结果列公式的操作(根据阈值以下分组是否开始确定0或1),然后对这些值求和。
当然,如果您经常进行这些类型的比较,则可能需要开发自己的用户定义函数(宏)来为您计算分组数。以下是此类功能的示例。
Function CountGroups(ByVal MyRange As Range, Threshold As Single) Dim Cell As Range Dim bInGroup As Boolean Dim iCount As Integer Application.Volatile iCount = 0 bInGroup = False For Each Cell In MyRange If Application.IsNumber(Cell) Then If Cell < Threshold Then 'Less than the threshold? If Not bInGroup Then 'Only count if starting new group iCount = iCount + 1 bInGroup = True 'Mark as being in group End If Else bInGroup = False 'No longer in a group End If End If Next CountGroups = iCount End Function
该函数将遍历范围内的每个单元格,并计算它是否是新的低于阈值组的开始。您可以通过在工作表中使用以下公式来使用该函数:
=CountGroups(A2:A16,E1)
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(8888)适用于Microsoft Excel 2007、2010和2013。您可以在以下版本的Excel旧菜单界面中找到本技巧的版本:
链接:/ excel-Counting_Groupings_Below_a_Threshold [计算阈值以下的分组]。