首页 文章

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

提问于
浏览
0

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

    EXPLANATION

    首先要解释你的公式在做什么 . 它遍历你的字符串,创建一个长度为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而不是最小的日期 .

    SOLUTION

    您的解决方案 MIN

    =MIN(IFERROR(VALUE(MID(A1,ROW($A$1:$A$1000),7)),99999))
    

    可以工作,因为它创建和数组如下:

    {99999,99999,99999,99999,99999,99999,42226,99999,...}
    

    并采取 MIN .

    Alternatively ,您还可以通过以下方式使用 LARGE

    =LARGE(IFERROR(VALUE(MID(A1,ROW($A$1:$A$1000),7)),0),8)
    

    也就是说,它在数组中找到第八个最大的日期,如果恰好有八个日期,它也应该是最小的 .

    将其作为数组公式输入 - 使用Ctrl Shift Enter

  • 1

    = IF('供应报告'!S2 =“”,“”,MIN(IFERROR( Value (MID('供应报告'!S2,行($ A $ 1:$ A $ 1000),7)),999999999999999)))

相关问题