计算两次之间的间隔(Microsoft Excel)
Roger问是否有一种方法可以计算列表中出现值之间的间隔。例如,他在A列中有数千个数字。查看单元格A351中的值,该值最后一次出现在列表中的时间是在单元格A246中。他想要一个可以放在单元格B351中并返回105(351和246之间的差)的公式。
这种方法很难在Excel中实现,因为Excel不能很好地向后搜索(向上搜索列)。如果前提可以逆转,那么任务将变得更加简单。例如,如果单元格B246中的公式可以返回值105,则指示到该值在单元格A246中下次出现之前的间隔,而不是计算最后一次出现。以下公式计算单元格A1中该值的下一次出现:
=MATCH(A1,A2:$A$65536,0)
将此公式放在单元格B1中,然后将其复制下来,但是需要许多单元格。如果列A中的值不再出现在该列中,则该公式将返回#N / A错误。如果您希望公式返回0,则可以进行以下操作:
=IF(ISNA(MATCH(A1,A2:$A$65536,0)),0,MATCH(A1,A2:$A$65536,0))
如果您绝对必须向上计数(查找上一个事件而不是下一个事件),那么最简单的方法是使用用户定义的函数。以下函数RowInterval将在您指定的范围内向后看,并返回所需的间隔:
Function RowInterval(TestCell As Range, LookHere As Range) As Long Dim varValue As Variant Dim lngRow As Long Application.Volatile varValue = TestCell.Value 'Check for occurrences of the test value in the search range If WorksheetFunction.CountIf(LookHere, varValue) > 0 Then With LookHere 'Get the last row of the search range lngRow = .Row + .Rows.Count - 1 'Start with the last cell in the search range and work up Do Until .Item(lngRow, 1).Value = varValue lngRow = lngRow - 1 Loop End With 'Subtract the number of the row containing the found occurrence 'from the number of the row containing the test value RowInterval = TestCell.Row - lngRow End If End Function
为了使用该功能,您可以将以下公式放入单元格B2中,然后将该公式复制到所需单元格的数量中:
=RowInterval(A2,A$1:A1)
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(2338)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本:
链接:/ excelribbon-Calculating_the_Interval_between_Occurrences [计算两次之间的间隔]。