谷歌表格中利用ArrayFormula实现多文本列分组后的名称排名需求
谷歌表格中利用ArrayFormula实现多文本列分组后的名称排名需求
嘿,我来帮你搞定这个谷歌表格的排名需求!你想要的是按country和state这两列分组,把每个组里的name按文本顺序排序后,给每个name分配一个组内的排名,而且要用ArrayFormula一次性自动填充所有行对吧?
先明确下你的原始数据和预期效果:
原始数据表格
| country | state | name | order |
|---|---|---|---|
| one | two | three | |
| one | two | four | |
| one | five | six | |
| one | five | seven | |
| eight | nine | ten | |
| eight | nine | eleven | |
| eight | nine | twelve |
预期结果表格
| country | state | name | order |
|---|---|---|---|
| one | two | three | 2 |
| one | two | four | 1 |
| one | five | six | 1 |
| one | five | seven | 2 |
| eight | nine | ten | 3 |
| eight | nine | eleven | 1 |
| eight | nine | twelve | 2 |
实现公式
你可以直接在order列的第一个单元格(比如D2)输入下面这个ArrayFormula公式,它会自动给所有行计算出正确的组内排名:
=ArrayFormula(IF(A2:A="",,COUNTIFS(A2:A,A2:A,B2:B,B2:B,C2:C,"<"&C2:C)+1))
公式解释
IF(A2:A="",, ...):这部分是用来判断如果country列(A列)是空行,就返回空值,避免公式把整个列都填满无用内容COUNTIFS(A2:A,A2:A,B2:B,B2:B,C2:C,"<"&C2:C):核心逻辑是统计和当前行同属一个country+state组,并且name文本比当前行name小的行数- 最后加
1:因为统计出的是比当前name小的数量,加1之后就是当前name在组内的排名啦
如果想要按文本降序排名(也就是name越大排名越靠前),只需要把公式里的<改成>就行:
=ArrayFormula(IF(A2:A="",,COUNTIFS(A2:A,A2:A,B2:B,B2:B,C2:C,">"&C2:C)+1))
备注:内容来源于stack exchange,提问作者IMTheNachoMan
相关产品推荐
相关产品推荐

