如何在Google Sheet的D1单元格使用ArrayFormula生成特定序列号
需求与解决方案
需要在D1单元格使用ArrayFormula生成与下表完全一致的序列号:
| 姓名 | 品质 | 类别 | 序列号 |
|---|---|---|---|
| Monu | gffg | B | 1 |
| David | rtet | G | 1 |
| John | dsadas | Q | 1 |
| John | iop | Q | 1 |
| John | bvn | A | 2 |
| John | Bp | ||
| Monu | hhsd | Y | 2 |
| Monu | dfghfh | R | 3 |
| Monu | hgfh | ||
| David | ljk | F | 2 |
| David | rty | G | 1 |
| David | wsddBPmer | V | |
| Monu | jhgn | Y | 2 |
| David | ghf | A | 3 |
| John | dfghfh | Q | 1 |
| John | fgdfg | C | 3 |
| John | fdbv | ||
| John | gdf | A | 2 |
| Kelly | dgf | X | 1 |
规则
- 每个唯一姓名对应独立的序列号序列
- 同一姓名且同一类别对应相同序列号,不同类别则序列号不同
- 类别为空的记录不生成序列号
- 品质字段包含"bp"(不区分大小写)的记录不生成序列号
公式
在D1单元格输入以下公式:
=ArrayFormula( LET( data, A2:C, names, INDEX(data,,1), qualities, INDEX(data,,2), categories, INDEX(data,,3), valid, (categories<>"")*NOT(REGEXMATCH(qualities, "(?i)bp")), key, IF(valid, names&"|"&categories, ""), unique_keys, UNIQUE(FILTER(key, key<>"")), numbered, HSTACK(unique_keys, SEQUENCE(ROWS(unique_keys))), result, XLOOKUP(key, INDEX(numbered,,1), INDEX(numbered,,2), ""), IF(valid, result, "") ) )
公式说明
- 用
LET定义变量简化公式结构 valid判断当前行是否符合生成条件:类别非空且品质不含不区分大小写的"bp"- 为有效行生成
姓名|类别的唯一标识key - 对所有唯一
key按出现顺序分配序列号 - 通过
XLOOKUP将序列号匹配到对应行,无效行返回空值
内容的提问来源于stack exchange,提问作者Aashit Garodia
相关产品推荐
相关产品推荐

