如何提取表格中每个客户每次出现的首行行号?
提取客户每次出现的首行行号解决方案
原始数据
原始表格数据如下:
1 Customer 1 2 Customer 1 3 Customer 1 4 Customer 2 5 Customer 3 6 Customer 1 7 Customer 1 8 Customer 3 9 Customer 3 10 Customer 4
需求
提取每个客户每次出现的首行行号,预期输出(纵向排列):
1 4 5 6 8 10
遇到的问题
连续重复客户的首行行号易获取,但客户非连续出现时,基于INDIRECT()的公式失效。尝试使用FREQUENCY(IF())获取客户出现位置的数组,例如针对Customer 1使用公式:
ARRAYFORMULA(FREQUENCY(INDEX(IF(customersRange=customer 1;ROW(customersRange));IF(customersRange<>customer 1;ROW(customersRange))))
得到数组{1;2;3;FALSE;FALSE;6;7;FALSE;FALSE},但无法提取其中非连续的6。还尝试过INDEX(MATCH())、INDEX()+FREQUENCY()、MATCH()、SMALL()、LARGE()等方法,均无效。
可行解决方案
在Google Sheets中,可以使用以下数组公式直接实现需求(假设客户数据位于A列,且从A1开始):
=FILTER(ROW(A:A), A:A<>"", OR(ROW(A:A)=1, OFFSET(A:A, -1, 0)<>A:A))
公式说明:
ROW(A:A):获取A列所有行的行号A:A<>"":过滤掉空行OR(ROW(A:A)=1, OFFSET(A:A, -1, 0)<>A:A):筛选两种情况的行号:- 第一行(必然是首次出现的行)
- 当前行的客户与上一行客户不同(说明是该客户新一轮出现的首行)
如果数据范围是固定的(比如A1:A10),可以把公式调整为:
=FILTER(ROW(A1:A10), A1:A10<>"", OR(ROW(A1:A10)=ROW(A1), OFFSET(A1:A10, -1, 0)<>A1:A10))
内容的提问来源于stack exchange,提问作者Orphal
相关产品推荐
相关产品推荐

