使用公式在excel字段中标识最小日期

时间:2016-08-12 07:58:58

标签: excel excel-formula array-formulas

我有一个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无效。

2 个答案:

答案 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 )))