我有一个excel文件,其中一列作为项目分配。该列的样本值如下:
XXX E(10aug15-30sep16),YYY G(30nov15-29jul16),ZZZZ C(18jan16-23dec16),AAA B(04jan16-28jul16)
我必须写一个公式来给出最小的所有日期。我知道,我可以使用宏,但由于安全问题,我们的组织希望避免使用宏。
上述字段的输出应为10-Aug-15
。请注意,每个日期总是7个字符。
我使用下面的数组公式(CTRL + SHIFT + ENTER)来查找最大日期:
=IF('Supply Report'!S2="","",MAX(IFERROR(VALUE(MID('Supply Report'!S2,ROW($A$1:$A$1000),7)),0)))
将MAX
修改为MIN
无效。
答案 0 :(得分:1)
<强>说明强>
首先要解释你的公式在做什么。它遍历你的字符串,创建一个长度为7的单独字符串数组,如下所示:
"XXX E(1"
"XX E(10"
"X E(10a"
" E(10au"
"E(10aug"
"(10aug1"
"10aug15"
"0aug15-"
...etc
然后对这些字符串执行VALUE
,如果字符串格式正确,则返回一个数字,否则错误
VALUE("XXX E(1") = #VALUE!
VALUE("XX E(10") = #VALUE!
VALUE("X E(10a") = #VALUE!
VALUE(" E(10au") = #VALUE!
VALUE("E(10aug") = #VALUE!
VALUE("(10aug1") = #VALUE!
VALUE("10aug15") = 42226
VALUE("0aug15-") = #VALUE!
...etc
然后使用IFERROR(formula,0)
函数将错误项替换为零,以便您的数组如下所示:
{0,0,0,0,0,0,42226,0,...}
因此,当您在该数组上执行MIN
时,它将返回0而不是最小的日期。
<强>解强>
您的解决方案MIN
:
=MIN(IFERROR(VALUE(MID(A1,ROW($A$1:$A$1000),7)),99999))
可以工作,因为它创建和数组如下:
{99999,99999,99999,99999,99999,99999,42226,99999,...}
并取MIN
。
或者,您还可以通过以下方式使用LARGE
:
=LARGE(IFERROR(VALUE(MID(A1,ROW($A$1:$A$1000),7)),0),8)
也就是说,它在数组中找到第八个最大的日期,如果恰好有八个日期,它也应该是最小的。
将其作为数组公式输入 - 使用 Ctrl + Shift + Enter
答案 1 :(得分:0)
= IF('供应报告'!S2 =“”,“”,MIN(IFERROR(价值(MID('供应报告'!S2,行($ A $ 1:$ A $ 1000),7)),999999999999999 )))