在 Calc 或 Excel 表中,我有一列包含一堆名称。每个名称可以出现一次或多次。
每个名字都有一个“首次出现”,即它出现的第一行。
我正在寻找一个表达式或公式来查找名称最新的首次出现。
举个例子来说明:
姓名 | |
---|---|
1 | 爱丽丝 |
2 | 查理 |
3 | 鲍勃 |
4 | 前夕 |
5 | 查理 |
6 | 大卫 |
7 | 鲍勃 |
8 | 爱丽丝 |
9 | 大卫 |
10 | 查理 |
11 | 前夕 |
David
第一个出现的名字是第 6 行,其他所有名字都出现得更早(而且也更靠下,但我只对它们第一次出现感兴趣)。所以在这种情况下我想要的名字是David
。
我可能可以想到一个带有备用列和排序机制的过度设计的解决方案,但我觉得可能有一种更简单的方法来做到这一点。
答案1
对于 LibreOffice,请输入以下内容数组公式。
=INDIRECT("B"&2+MAX(MATCH(B3:B13;B$3:B$13;0)))
为了避免使用数组公式,请改用 SUMPRODUCT。
=INDIRECT("B"&2+SUMPRODUCT(MAX(MATCH(B3:B13;B$3:B$13;0))))
答案2
对于 Excel,只需使用:
=XLOOKUP("*", UNIQUE(B1:B11), UNIQUE(B1:B11), , 2, -1)
它不会自动对列表进行排序,因此UNIQUE()
列表中的最后一项也是最后一个“新名称的第一个实例”。然后使用XLOOKUP()
查找(需要双引号字符)anything
查找,"*"
其中第 5 个参数为“2”,这样它就知道这是一个通配符,最后一个参数为“-1”,这样它就会从末尾查找,这样它就会找到最后一个这样的名称。
关键在于UNIQUE()
生成列表,然后不对其进行排序。令人恼火的是(通常)它不会这样做。但对于你的情况来说,这是一件好事。