在 Excel 中,是否有一个 Excel 公式可用于填充 B 列(在下面的示例中),该公式将返回当前行之前包含特定字符串的最后一行号?
数据不连续。
例如,数据可能是:
| A (value) B (prev recent instance)
----------------------------------------------
1 | Mike
2 | John
3 | Mike 1
4 | Tony
5 | Mike 3
6 | John 2
然后我想将其扩展为 C 列来显示最早的实例。
这看起来与这个问题非常相似: 什么 Excel 公式可以返回包含特定数据的范围内单元格的最后一行号?,但是该问题和答案要求数据是连续的。
编辑: 我希望答案是一个工作表公式,但如果您认为通过 VBA 实现更合适,请在您的答案中也包含它,并说明每种方法的优缺点。
答案1
为了找到最早的实例,下面提到的公式是:-
=LOOKUP(2,1/(A:A=A2),ROW(A:A))
为了让您更好地理解,以下是屏幕截图
答案2
假设你的数据从 A1 开始,在 B2 中尝试这个“数组公式”
=IF(COUNTIF(A$1:A1,A2),MATCH(2,1/(A$1:A1=A2)),"")
按 CTRL+SHIFT+ENTER 确认并复制下来
或者你可以使用这个非数组版本
=IF(COUNTIF(A$1:A1,A2),MATCH(2,INDEX(1/(A$1:A1=A2),0)),"")
在 Excel 2007 或更高版本中,您可以使用 IFERROR 简化,即数组版本变为
=IFERROR(MATCH(2,1/(A$1:A1=A2)),"")
对于 C 列中的“第一个实例”行,请尝试在 C1 中向下复制此公式
=MATCH(A1,A$1:A1,0)
注意:公式并不严格返回“行号”,而是返回数据的相对行号,即数据第 1 行返回 1 等等。