excel 如何返回特定类别对应的最后n个值?

dkqlctbz  于 2023-02-05  发布在  其他
关注(0)|答案(2)|浏览(121)

我有下面的样本数据。

Date         Category   Price   Quantity
02-01-2019  BASE_Y-20   279 1
02-01-2019  BASE_Y-21   271.25  0
03-01-2019  BASE_Y-20   276.5   2
03-01-2019  BASE_Y-21   266.5   0
04-01-2019  BASE_Y-20   272.88  14
04-01-2019  BASE_Y-21   266.5   1
07-01-2019  BASE_Y-20   270.48  29
07-01-2019  BASE_Y-21   262.75  0
08-01-2019  BASE_Y-20   270 4
08-01-2019  BASE_Y-21   264 0
09-01-2019  BASE_Y-20   270.06  31
09-01-2019  BASE_Y-21   262.85  0

什么是动态公式,我可以使用它返回对应于类别BASE_Y-20的最后5个价格?如果没有5个值,该公式必须返回任何可用的价格,这是具有挑战性的部分。(例如:对于给定的数据,必须返回270.06、270、270.48、272.88和276.5。如果我们只有第一行,它必须返回279)
我试过sumproduct。那当然会给出相应的价格。可以使用Offset来获取最后5个数据。但是没有办法获取最后5个价格对应于一个特定的动态类别。

tktrz96b

tktrz96b1#

从下到上的最后匹配

    • 编辑**
  • 在P. b的大力帮助下,公式简化为:
=LET(cData,B2:B13,rData,C2:C13,cStr,G1,rCount,G2,
    rFiltered,IFERROR(TAKE(TAKE(FILTER(HSTACK(cData,rData),cData=cStr),,-1),-rCount),""),
Result,SORTBY(rFiltered,SEQUENCE(ROWS(rFiltered)),-1),Result)

    • 公式截图**
J2  =HSTACK(B2:B13,C2:C13)
L2  =FILTER(J2#,B2:B13=G1)
N2  =TAKE(L2#,,-1)
O2  =TAKE(N2#,-G2)
P2  =ROWS(O2#)
Q2  =SEQUENCE(P2)
R2  =SORTBY(O2#,Q2#,-1)
    • 初始帖子中的问题**
  • 我不知道是什么驱使我做出数据是A3:D13的决定,而它显然是B3:B13C3:C13
  • TAKE将在行数/列数少于要求的情况下工作,例如,如果您需要五行而只有两行,则返回两行。
  • 与在SEQUENCE函数中使用ROWS,然后在INDEX中使用它不同,使用SORTBY按序列排序更为简单,在这个特定的例子中,按降序(-1)排序。
    • 初始过帐(错误)**
    • 让**
=LET(Data,A2:D13,cCol,2,cStr,G1,rCol,3,rCount,G2,
    cData,INDEX(Data,,cCol),rData,INDEX(Data,,rCol),Both,HSTACK(cData,rData),
    bFiltered,FILTER(Both,cData=cStr),rFiltered,TAKE(bFiltered,,-1),rRows,ROWS(rFiltered),
    fRows,IF(rRows>rCount,rCount,rRows),rSequence,SEQUENCE(fRows,,rRows,-1),
Result,INDEX(rFiltered,rSequence),Result)

    • 公式截图**
J3  =INDEX(A2:D13,,2)
K3  =INDEX(A2:D13,,3)
L3  =HSTACK(J3#,K3#)
N3  =FILTER(L3#,J3#=G1)
P3  =TAKE(N3#,,-1)
Q3  =ROWS(P3#)
R3  =IF(Q3>G2,G2,Q3)
S3  =SEQUENCE(R3,,Q3,-1)
T3  =INDEX(P3#,S3#)
tjjdgumg

tjjdgumg2#

您可以尝试:

F3中的公式:

=TAKE(SORT(FILTER(A:C,B:B=F1),1),-F2,-1)

注意事项:

  • 最新的价格会在底部;
  • 如果您的数据总是从一开始就排序,那么就抛弃嵌套的SORT(),使用=TAKE(FILTER(A:C,B:B=F1),-F2,-1);
  • 如果根本不存在任何值,则将公式嵌套在=IFERROR(<Formula>,"")中,以返回您希望在此类事件中显示的任何值。

相关问题