我正在寻找一个 Excel 365 公式,当传递一个示例日期时,它将从表中返回一个早于或等于示例日期的日期,并且相应的值是大于 0 的第一个值。
- 因此,对于 2 月 1 日至 8 日,公式将返回 01-Feb-21,因为这是表格上的第一个日期。
- 对于 10 日到 16 日,它将返回 10 日,因为那是值增加到 0 以上的第一个日期。
- 对于第 17 位到表的末尾,它将返回第 17 位。
我的尝试之一:
=SUMPRODUCT(--(Table1[Date]<=D2),--(Table1[Value]>0),Table1[Date])
- 2 月 2 日,前两个日期为真,前两个数字也是如此,因此它将日期加在一起并返回 08-Mar-42。
D2
上述公式中包含的日期在 01-Feb 到 25-Feb 的范围内。
我尝试过使用=MIN(IF((Table1[Date]<=D2)*(Table1[Value]>0),Table1[Date],"-"))
which 返回 2 月 1 日。
任何帮助将不胜感激。
您可以在其中嵌套过滤器函数
vlookup
以获得所需的内容,例如:=VLOOKUP(DATEVALUE("02/16/2021"),FILTER(A2:B18,B2:B18>0),2,true)
有趣的问题。
为了帮助我弄清楚,我用这些词框起来:
我认为,逗号后面的部分是棘手的部分,因为该系列后面的日期可能有不止一行,前面有一个零。
无论如何,我认为这会成功:
为了将其分开,我们首先要获取参数 date 之前值为零的日期列表。我们这样做:
但是从那个列表中,我们只想要最近的行为零,所以我们也使用 MAX:
这里的问题是,对于第一组行(2 月 8 日之前),没有更小的日期为零的行,因此它返回 #CALC!错误:
为了解决这个问题,我们将它包装在 IFERROR 中,这样如果上面的公式返回错误,我们让它返回整个日期系列的 MIN:
我们试图在这里得到的是(零行日期)和(表中第一个日期之前的最大日期)集合的最大日期。后一点意味着我们需要从 IFERROR 的第二个参数中减去 1,这样它就不会返回 2 月 1 日,这是第一个有值的日期,但它会返回前一天:
好的,这很好。现在我们为每一行提供最近的零行的日期(或表中第一个日期之前的日期)。
所以我们需要过滤该日期之后但在参数日期之前或之后的日期,然后得到结果范围的最小值。
这个公式可以做到这一点:
然后,要获得该日期列表中最小的一个,您只需将整个内容包装在 MIN 中,如我的答案顶部所示。
虽然不稳定,但您可以在这里尝试
OFFSET()
:中的公式
C2
: