Stuart在工作表中有一系列阅读材料。在第一列中,他具有与读数相关的日期,在第二列中,他具有实际读数。 Stuart希望有一个公式可以返回读数为负的第一个日期。换句话说,该公式应在第二列中查找第一个为负的值,然后返回与该值关联的日期。

第二列中可以有多个负值,但他只需要与第一个负值关联的日期即可。

有许多方法可以解决此问题。所有方法都假定A列中的日期按升序排列,并且B列中的读数不是按任何可辨别的顺序排列。 (换句话说,在任何给定日期,读数都可能在0上下波动。)

假设您对工作表的布局有一定的控制权,则可以在C列中添加一个中间工作列,用于指示值何时为负。只需在每个读数右侧的C列中放置一个这样的公式:

=IF(B1<0,A1,"")

如果B中的值小于0(负),则此公式返回A列中的日期,否则不返回任何内容。您需要做的就是在C列中查找最小值:

=MIN(C:C)

将结果格式化为日期,并表示读数首次变为负数的日期。

另一种方法是放弃中间列的使用,并使用数组公式确定日期。假设数据在A1:B42范围内,则可以使用以下任何公式:

=MIN(IF(B1:B42<0,A1:A42,""))

=OFFSET($A$1,MATCH(TRUE,$B$1:$B$42<0,0)-1,,,)

=INDEX(A:A,MIN(IF(B1:B42<0,ROW(B1:B42))))

=INDEX(A1:A42,MATCH(TRUE,B1:B42<0,0))

=INDIRECT("A"&MIN(IF(B1:B42<0,ROW(B1:B42))),TRUE)

请记住,这些都是数组公式,因此您需要按Shift + Ctrl + Enter输入任意一个。将结果格式化为日期,这就是您想要的答案。

如果愿意,还可以使用一个简单的宏来确定日期:

Function GetFirstNegative(rngdata)

Dim c As Variant

For Each c In rngdata         If c < 0 Then             GetFirstNegative = c.Offset(0, -1)

Exit Function         Else             GetFirstNegative = "All Data is Positive"

End If     Next End Function

在工作表中,您可以通过以下方式使用此用户定义的函数:

=GetFirstNegative(B1:B42)

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(7092)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: