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
。 数组公式不像OR
或AND
限定符:
=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编辑器,如下图所示:
在这个窗口中,你需要添加一个模块,点击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
所以它应该看起来像这样:
现在你可以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
。
编辑:删除关于斯科特答案的截图。 他的回答是正确的。