返回最后一次匹配的值

发布于 2024-07-22 07:44:38 字数 340 浏览 6 评论 0原文

我需要一个公式来返回“文本”最后一次匹配的数据值。 行数也是可以接受的。 宏是不可接受的。 名称列未排序,无法排序! 仅“名称”列用作查找值。 我宁愿使用一个/多个辅助列而不是数组公式。

Row Name    Data
1   Joe     10
2   Tom     20
3   Eva     30
4   Adam    40
5   Tom     21

LARGE 仅适用于数字,VLOOKUP 仅返回第一个匹配项。 LOOKUP 仅有时有效,所以它也被淘汰了。

因此,如果我想要“Tom”的最后一场比赛,那么它应该返回“21”。

I need a formula to return the value of Data for the last match of "Text". Row number is also acceptable. Macro is NOT acceptable. Name column is unsorted and cannot be sorted!
Only column "Name" is used as lookup value. I would rather use a/multiple helper column(s) instead of an array formula.

Row Name    Data
1   Joe     10
2   Tom     20
3   Eva     30
4   Adam    40
5   Tom     21

LARGE only works with numbers, and VLOOKUP only returns the first match. LOOKUP only works sometimes, so its out too.

So if I wanted the last match for "Tom" then it should return "21".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

青衫负雪 2024-07-29 07:44:38

使用辅助列可以避免数组公式。
假设 F1 中有要匹配的名字(即 Tom)
在辅助列 C2 行中输入

=IF(A2<>$F$1,0,row())

然后沿着数据复制公式。

现在,C 列包含 0(表示不匹配的名称)和行号(表示匹配的名称)。 最大化列会产生解决方案的行。
现在结果很简单,只需将正确的偏移量与函数 offset 一起使用即可:

=OFFSET(B1,max(C:C)-1,0)

PS:我的 Excel 副本是意大利语,因此我无法测试公式的英文翻译。

Array formulas could be avoided with a helper column.
Suppose to have in F1 the name to match (i.e. Tom)
In the helper column row C2 enter

=IF(A2<>$F$1,0,row())

Then copy the formulas along your data.

Now the column C contains 0 for the unmatched names and the row number for the matched ones. Maxing the column yield the row of the solution.
Now the result is simple a matter of using the correct offset with the function offset:

=OFFSET(B1,max(C:C)-1,0)

PS: my copy of excel is in italian, so I can't test this english translaction of the formulas.

西瓜 2024-07-29 07:44:38

我认为这是最简单的方法。

=LOOKUP("Tom";A2:B7)

I think it's the easiest way to make it.

=LOOKUP("Tom";A2:B7)
权谋诡计 2024-07-29 07:44:38

创建包含数组公式的列(使用 Ctrl+Shift+Enter 输入):

=VLOOKUP(MAX(IF($B$2:$B$6=B2, $A$2:A$6, 0)), $A$2:$C$6, 3, FALSE)

为确保操作正确,请单击单元格,公式应显示在大括号 ({}) 中。

注意:这假设“Row”位于 A1 中。

Create a column with an array formula (enter it with Ctrl+Shift+Enter):

=VLOOKUP(MAX(IF($B$2:$B$6=B2, $A$2:A$6, 0)), $A$2:$C$6, 3, FALSE)

To make sure you did it right, click on the cell, and the formula should be shown encased in curly brackets ({}).

Note: This assumes that "Row" is in A1.

大姐,你呐 2024-07-29 07:44:38

我已经想出了一个解决方案,但它要求数据中的数字是并发的,就像这样

Name        Data
Joe         1
Tom         1
Eva         1
Adam        1
Tom         2
Tom         3
Eva         2

但是没关系,因为我的数据无论如何看起来都是这样。 因此,如果名称之前使用过,那么它必须是旧的最高+1,即并发。

名称为 A1,数据为 B1,此公式代入 C2:

FLOOR(SQRT(2*SUMIF(A2:A7,A2,B2:B7)),1)

I have come up with a solution, but it requires that numbers in Data are concurrent, like so

Name        Data
Joe         1
Tom         1
Eva         1
Adam        1
Tom         2
Tom         3
Eva         2

But thats okay, since that my data looks like that anyway. So if Name is used before then it must be the old highest +1 aka concurrent.

Name is A1 and Data is B1, and this formula goes into C2:

FLOOR(SQRT(2*SUMIF(A2:A7,A2,B2:B7)),1)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文