=IF(E2="","",100001+MATCH(E2,INDEX(UNIQUE(FILTER(E$2:E$2400,E$2:E$2400<>"")),0),0)-1)
各函数作用:
1. 外层IF函数:
作用:检查E2单元格是否为空
如果为空:返回空字符串 ""
如果不为空:执行后面的计算
2. 核心计算部分:
3. MATCH函数:
作用:查找E2在数组中的位置
E2:要查找的值(当前行的名称)
INDEX(...):查找的范围(唯一值数组)
0:精确匹配模式
4. INDEX函数:
INDEX(UNIQUE(FILTER(...)), 0)
5. UNIQUE函数:
UNIQUE(FILTER(E$2:E$2400, E$2:E$2400<>""))
作用:去除重复值,返回唯一值列表
FILTER(...):先过滤掉空值
6. FILTER函数:
FILTER(E$2:E$2400, E$2:E$2400<>"")
作用:筛选E2:E2400范围内非空的值
E$2:E$2400:数据范围
E$2:E$2400<>"":筛选条件(非空)
公式执行流程:
过滤:FILTER(E$2:E$2400, E$2:E$2400<>"")
去重:UNIQUE(...)
对上一步的结果去除重复值
得到所有唯一的协定方名称列表
转数组:INDEX(..., 0)
查找位置:MATCH(E2, ..., 0)
查找当前行的名称(E2)在唯一值列表中的位置
例如:"名称1"在第1个位置,返回1
"名称2"在第2个位置,返回2
计算ID:100001 + 位置 - 1
位置1:100001 + 1 - 1 = 100001
位置2:100001 + 2 - 1 = 100002
位置3:100001 + 3 - 1 = 100003
简化理解:
这个公式实际上在做:
获取所有不重复的名称
给每个名称分配一个从100001开始的序号
根据当前行的名称,返回对应的序号