【问题标题】:How to get the newest value from a column with conditions如何从有条件的列中获取最新值
【发布时间】:2011-09-29 13:08:36
【问题描述】:

我在 Excel 中有一个包含列的表格:

  1. 日期
  2. 人名
  3. 金额(英镑)

该表用于记录人们何时付钱给我。通常,我可以让不止一个人在同一天向我付款。而且,随着时间的推移,同一个人会在很多天向我付款。

记录被添加到表格的底部,因此订购将是日期,但不会进一步订购名称或数量。

使用公式,有没有一种方法可以检索特定人的最近金额?

如果这太复杂或不可能,那么我可以解决以下工作: 将第 4 列添加到名为“Last”的表中。如果它是特定人员的最后一个条目,则显示 TRUE,否则显示 FALSE。

【问题讨论】:

    标签: excel worksheet-function


    【解决方案1】:

    感觉应该有一个相当直截了当的答案,但我发现它很让人头疼,所以有兴趣看到答案。

    在进行了一些谷歌搜索后,我发现了一个发布在专用 Excel 网站 (view here) 上的解决方案。 [注意 - 查看标题“任意查找”]

    将其应用于您的示例,假设您的数据在A1:C10 和单元格D2 中,您想在单元格D3 中输入名称并返回最近的付款:

    1   Date    Name    Amt    EnterName
    2   20 Jul  Bob     50     <enter name here>
    3   13 Sep  Susan   20     = enter formula here (see below)
    4   06 Jan  Xavier  100
    

    在单元格D3 中输入以下作为数组公式(即输入公式,然后按CTRL + SHIFT + ENTER

    =INDEX($B$2:$C$10,SMALL(IF(OFFSET($B$2:$C$10,0,0,ROWS($B$2:$C$10),1)=$D$2, ROW(OFFSET($B$2:$C$10,0,0,ROWS($B$2:$C$10),1))-ROW(OFFSET($B$2:$C$10,0,0,1,1) )+1, ROW(OFFSET($B$2:$C$10,ROWS($B$2:$C$10)-1,0,1,1))+1),COUNTIF(OFFSET($B$2:$C$10,0,0,ROWS($B$2:$C$10),1),$D$2)),2)
    

    如果您想了解更多详细信息,建议您查看我提供的链接。为清楚起见,我只是根据提供的链接修改了公式(更改了单元格引用)。

    【讨论】:

    • 这是一种享受,非常棒。我很惊讶需要这么复杂的公式。我希望 Excel 有一些不起眼的单一功能,可以发挥所有作用。
    • @user691226 - 我同意公式很复杂。出于这个原因,我给了Excellll 一个赞成票(见下文),因为他的解决方案更加简洁,而且从我所做的测试来看,效果同样好。
    【解决方案2】:

    这是基于我在a previous SO post 中给出的答案的一种方法。

    =INDEX($C$1:$C$19,MATCH(MAX(IF($B$1:$B$19="PersonNameHere",$A$1:$A$19,0)),IF($B$1:$B$19="PersonNameHere",$A$1:$A$19,"")))
    

    其中 A 是 Date 列,B 是 Person Name 列,C 是 Amount 列。您必须按 Ctrl+Shift+Enter 将其作为数组公式输入。

    【讨论】:

    • 我在一些样本数据上尝试了你的公式,效果很好。干得好
    【解决方案3】:

    我在这里看不到一种只用一个公式就能做到这一点的简单方法。

    如果您的数据从 A2C11
    您可以将此公式添加到第 4th 列(假设在单元格 D2 中):

    {=MAX(IF($B$2:$B$11=B2,$A$2:$A$11,0))}
    

    这是一个array formula,您必须使用 Ctrl-Shift-Enter
    进行验证 这将告诉您当前人员的最后日期是什么。

    然后在另一列中找到 last amount(假设在单元格 E2 中)并使用以下公式:

    =INDEX($C$2:$C$11,MATCH(D2,$A$2:$A$11,0))
    

    [编辑] 我刚刚尝试将这些公式合二为一,而且很简单:

    {=INDEX($C$2:$C$11,MATCH(MAX(IF($B$2:$B$11=B2,$A$2:$A$11,0)),$A$2:$A$11,0))}
    

    这仍然是一个数组公式。

    唉,@Excellll 更聪明(而且速度更快)并在第一时间给出了解决方案

    【讨论】:

    • 感谢 JMax 的道具。我必须警告,当有多个具有相同日期的行时,MATCH 公式中的第二个 IF 语句是必要的。否则它将只返回该日期的第一个匹配项,这可能是也可能不是您想要的记录。
    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多