如何从具有条件的列获取最新值

时间:2011-09-29 13:08:36

标签: excel worksheet-function

我在Excel中有一个表格,其中包含以下列:

  1. 日期
  2. 人名
  3. 金额(£)
  4. 该表用于记录人们何时付钱给我。通常情况下,我可以在同一天让不止一个人付钱给我。此外,同一个人会在很长一段时间内付钱给我。

    记录会添加到表格的底部,因此订单将按日期排序,但不会对名称或金额进行进一步排序。

    使用公式,有没有办法可以检索特定人员的最新金额?

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

3 个答案:

答案 0 :(得分:2)

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

完成了一些谷歌搜索后,我遇到了一个专门的excel网站(view here)上发布的解决方案。 [NB - 查看标题'任意查询']

将其应用于您的示例,假设您的数据位于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)

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

答案 1 :(得分: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键将其作为数组公式输入。

答案 2 :(得分:1)

我在这里看不到一个简单的方法,只用一个公式来做。

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

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

这是array formula你必须通过 Ctrl - Shift - 输入来验证 这将告诉您当前人的最后日期是什么。

然后找到另一列的最后一笔金额(比如在单元格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更聪明(也更快)并在第一时间提供解决方案