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 [计算两次之间的间隔]。