|
A列和B列是某社区的户籍数据。想要根据B列家庭关系的标识,在C列加序号,即为每一户家庭自动生成一个连续的序号。
以B列各个“户主”所在的单元格作为每一户的开头,该户主及其家庭成员,也就是说直到下一户“户主”之前的所有人共享同一个序号。遇到新“户主”时,序号自动加1。
了解完提干后,我们的任务很明确。这是一个户籍整理添加序号的工作:
自动为每一户家庭生成一个唯一的、连续的序号。同一户家庭的所有成员拥有相同的序号。
我们既可以使用传统公式或旧式公式实现,也可尝试挑战使用不同的动态数组函数,比如SCAN、MAP等实现同样的需求。使用动态数组公式后能自动将结果填充至整个数据区域,无需手动拖动。
SCAN+LAMBDA
=SCAN(0,B2:B9,LAMBDA(a,b,IF(b=”户主”,a+1,a)))
0表示初始累计值,a代表累计值,b代表当前单元格的值。
从初始值0开始,遇到”户主”就在累加器a的基础上+1,否则保持当前值a不变,结果会自动溢出到C2:C9区域。
这是入门学习SCAN函数的一个非常经典的实用方案。
COUNTIF动态数组化升级版
MAP+LAMBDA+COUNTIF
我们可以在方案2的基础上将COUNTIF动态数组化:
=MAP(B2:B9,LAMBDA(a,COUNTIF(B$2:a,”户主”)))
①逐行映射:MAP函数遍历B2:B9的每个单元格。
②动态范围:对每个单元格a,统计从B2到当前单元格a范围内的”户主”数量。
③累计计数:随着遍历向下,统计范围逐步扩大,实现户主数量的累计。
B2(“户主”) → 统计B2:B2 → 结果1
B3(“妻”) → 统计B2:B3 → 结果1
B4(“户主”) → 统计B2:B4 → 结果2
B5(“女”) → 统计B2:B5 → 结果2
B6(“妻”) → 统计B2:B6 → 结果2
这种升级实现了一个公式自动溢出所有结果,兼具了COUNTIF的简洁和动态数组的便利。
=MAP(B2:B9,LAMBDA(a,SUM(–(B$2:a=”户主”))))
①逐行映射:MAP遍历B2:B9区域,将每个单元格临时命名为a。
②动态累计:对每个a,统计从B2到当前a位置的”户主”数量。
③数组溢出:随着遍历向下,统计范围逐步扩大,实现户主数量的累计。
这种方案的核心思路大致与方案3类似(MAP+LAMBDA+COUNTIF)。而本例结合了SUM方案的直接明了,具备MAP函数的一次性溢出优势,一个公式解决整个区域,无需下拉填充公式。这是静态公式与动态数组的完美结合。
学习Excel/如果你没有天赋/那就一直重复/当你快到本能反应的时候/你的重复就是别人眼中的天赋/冲破捆绑/展翅翱翔/回顾关键内容/善用图片表达/学会建立联系/拓展深度广度/浓缩关键概念/应用到行动中/善于归纳总结/尝试进行分享
对单元格部分文字内容替换 格式更改←
合并工作表,用两个函数就搞定啦←
比vlookup还强大的动态随机查询←
根据起始序号与终止序号写入内容←
regexp正则提取:款式&尺码多组提取←
一个关于人口普查Excel户籍整理的问题←
一个关于人口普查Excel户籍整理的问题2←
regexp+vlookup根据简称查询全称←
regexp+countif+filter根据全称查找简称←
excel1秒批处理1000条混乱时间数据←
Regexp这个大哥级函数人狠话不多←
|