如何在Google Sheets中合并不同命名规则的数据行并求和
问题描述
场景1:同编号道路的不同命名变体汇总
原始数据:
| Road | Accident |
|---|---|
| I-10 | 10 |
| I-53 | 10 |
| I-10 East | 5 |
| I-10/S | 5 |
期望汇总结果:
| Road | Accident |
|---|---|
| I-10 | 20 |
| I-53 | 10 |
场景2:街道名称缩写与全称的汇总
原始数据:
| Road | Accident |
|---|---|
| US STREET | 10 |
| US ST | 10 |
| 5 AVENUE | 5 |
| 5 AVE | 5 |
期望汇总结果:
| Road | Accident |
|---|---|
| US STREET | 20 |
| 5 AVENUE | 10 |
此前查阅过相关讨论,但未找到合并相似行并对另一列求和的具体方法,寻求解决方案。
解决方案
针对两种场景,可通过Google Sheets的正则匹配+分组求和函数实现,以下是具体方法:
处理场景1:同编号道路变体汇总
方法1:批量自动汇总(QUERY+REGEXREPLACE)
假设原始数据在A:B列,在空白单元格输入公式:
=QUERY( {ARRAYFORMULA(REGEXREPLACE(A2:A, "^I-10.*", "I-10")), B2:B}, "SELECT Col1, SUM(Col2) WHERE Col1 IS NOT NULL GROUP BY Col1 LABEL Col1 'Road', SUM(Col2) 'Accident'" )
- 逻辑:用
REGEXREPLACE将所有以I-10开头的名称统一替换为I-10,再通过QUERY分组求和。
方法2:单条道路手动求和(SUMIF)
若仅需针对特定道路计算,可直接用:
- I-10总和:
=SUMIF(A:A, "I-10*", B:B) - I-53总和:
=SUMIF(A:A, "I-53", B:B)
之后手动整理成表格即可。
处理场景2:街道缩写与全称匹配汇总
方法1:批量统一名称后求和(QUERY+REGEXREPLACE)
假设原始数据在A:B列,输入公式:
=QUERY( {ARRAYFORMULA(REGEXREPLACE(REGEXREPLACE(A2:A, "\bST\b", "STREET"), "\bAVE\b", "AVENUE")), B2:B}, "SELECT Col1, SUM(Col2) WHERE Col1 IS NOT NULL GROUP BY Col1 LABEL Col1 'Road', SUM(Col2) 'Accident'" )
- 逻辑:用两次
REGEXREPLACE分别将ST替换为STREET、AVE替换为AVENUE,统一名称格式后分组求和。
方法2:自定义映射表扩展适配(VLOOKUP+SUMIF)
若有更多缩写规则,先建立映射表(例:D列存缩写,E列存对应全称):
| 缩写 | 全称 |
|---|---|
| ST | STREET |
| AVE | AVENUE |
然后用公式统一名称:
=ARRAYFORMULA(IFNA(VLOOKUP(REGEXEXTRACT(A2:A, "\b[A-Z]{2,}\b"), D:E, 2, FALSE), A2:A))
得到统一名称列后,再用SUMIF或QUERY完成求和分组。
内容的提问来源于stack exchange,提问作者enginexray
相关产品推荐
相关产品推荐

