【问题标题】:Identify min date in excel field using formula使用公式识别 excel 字段中的最小日期
【发布时间】:2016-08-12 07:58:57
【问题描述】:

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

【问题讨论】:

  • "以上字段的输出应该是 04-Jan-16。"为什么所有日期的最小值不是 15 年 8 月 10 日?
  • 感谢指出,我的错。是的,应该是 15 年 8 月 10 日。更新了文本。
  • {=IF('Supply Report'!S2="","",MIN(IFERROR(VALUE(MID('Supply Report'!S2,ROW($A$1:$A$1000),7)),9^99)))}
  • 谢谢,愚蠢的错误;)

标签: excel excel-formula array-formulas


【解决方案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)

也就是说,它在数组中找到第 8 个最大的零日期,如果正好有 8 个日期,它也应该是最小的。

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

【讨论】:

  • 嗨@ShubhamGupta。如果这回答了您的问题,请接受它以关闭问题。
【解决方案2】:

=IF('供应报告'!S2="","",MIN(IFERROR(VALUE(MID('供应报告'!S2,ROW($A$1:$A$1000),7)),999999999999999 )))

【讨论】:

  • 如果你能解释这个公式是如何工作的以及为什么需要 MAX 一个 IFERROR(..., 0) 而使用 MIN 一个 IFERROR(..., 999999999999999) ,你会得到一个赞成票。
  • 上面的答案解释了它:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
相关资源
最近更新 更多