find同一列中两个不同string的最早date

我有一列包含工作订单状态的数据,另一列显示工作订单计划完成的date。 我需要确定工作订单的最早date,其状态为“WCON”或“ACK”

我用这个公式

=SMALL(IF(OR('Raw PM Data'!$E$2:$E$999="WCON")*('Raw PM Data'!$E$2:$E$999="ACK"),'Raw PM Data'!$L$2:$L$999),1) 

列E具有状态,列L具有date。

如果数据集同时具有ACK和WCON条目,则工作正常,但是如果数据集没有“ACK”,则公式会中断并报告“!NUM”。

有人可以指出我正确的方向来解决问题

谢谢

加里

尝试使用+而不是OR 。 数组公式不像ORAND限定符:

 =SMALL(IF(('Raw PM Data'!$E$2:$E$999="WCON")+('Raw PM Data'!$E$2:$E$999="ACK"),'Raw PM Data'!$L$2:$L$999),1) 

这是一个Array公式,必须用Ctrl-Shift-Enter确认。

这工作在任何具有“WCON”或“ACK”的行将返回true; > 0.那些行将被用来find最小的。 一个将是零和另一个1.因此,将它们加在一起,你会得到1.如果它不会返回0。

既然你find第一个最小,你也可以使用MIN:

 =MIN(IF(('Raw PM Data'!$E$2:$E$999="WCON")+('Raw PM Data'!$E$2:$E$999="ACK"),'Raw PM Data'!$L$2:$L$999)) 

当需要AND限定符时使用*或ultiple IF语句。

只是为了表明它的作品:

在这里输入图像说明

我没有在单元格中编写复杂的公式,而是使用visual basic创build了一个公共函数,它可以用作个性化的工作表函数。

首先按下“alt-F11”调出VB编辑器,如下图所示:

VB编辑器

在这个窗口中,你需要添加一个模块,点击insert然后点击module,这会导致一个空的代码模块,在那里你可以通过下面的代码:

 Option Explicit Public Function SMALLIF(Criteria1 As Variant, Criteria2 As Variant, CriteriaRange As Range, DataRange As Range) As Variant Dim i As Long Dim arrDat() As Variant Dim arrRes() As Variant ReDim arrRes(0) arrDat = Union(CriteriaRange, DataRange) For i = LBound(arrDat, 1) To UBound(arrDat, 1) If arrDat(i, 1) = Criteria1 Or arrDat(i, 1) = Criteria2 Then If UBound(arrRes) = 0 Then ReDim arrRes(1 To 1) arrRes(1) = arrDat(i, 2) Else ReDim Preserve arrRes(1 To UBound(arrRes) + 1) arrRes(UBound(arrRes)) = arrDat(i, 2) End If End If Next i SMALLIF = arrRes(1) For i = LBound(arrRes) To UBound(arrRes) If arrRes(i) < SMALLIF Then SMALLIF = arrRes(i) End If Next i End Function 

所以它应该看起来像这样:

用编码的VB编辑器

现在你可以closuresVB编辑器,你可以在单元格中写下以下内容:

 =SMALLIF("WCON"; "ACK"; 'Raw PM Data'!$E$2:$E$999; 'Raw PM Data'!$L$2:$L$999) 

现在应该返回状态WCON和ACK的工作订单的最早date。

(请记住,您的Excel可能会在我使用参数分隔符时使用参数分隔符

我会build议按照以下方式执行。 增加了新的列与最大可能的date(例如: 31/12/9999我在F2指定)。

然后我使用公式M2=IF(OR(E2="WCON",E2="ACK"),L2,$F$2) ,然后拖动这个公式直到M999,即M999=IF(OR(E999="WCON",E999="ACK"),L999,$F$2) 。 然后我用formula =SMALL(M2:M999,1)来得到最小值。

公式

O2中的公式

斯科特答案 – 这个答案是正确的。 按住ctrl+shift+enter

编辑:删除关于斯科特答案的截图。 他的回答是正确的。