如何在Google Sheets中将含逗号分隔值的列拆分并统计值出现次数?
Google Sheets 逗号分隔值按类别统计方案
一、拖拽公式分步方案
适合不想写脚本的场景,按步骤操作即可:
步骤1:拆分各列数据并关联类别
假设原数据中A列为类别,B、C、D列为含逗号分隔值的列:
- 在E2单元格输入公式:
按回车后,E列会自动拆分B列的所有值,并在每个值前加上对应类别(用=ARRAYFORMULA(IF(B2:B="",, A2:A&"|"&SPLIT(B2:B, ", ")))|分隔)。 - 把E2的公式拖拽到F2、G2,对应处理C、D列的数据。
步骤2:合并所有拆分后的数据
在H2单元格输入公式:
=FLATTEN(E2:G)
这会把E、F、G列的所有行数据合并成单列,方便后续统计。
步骤3:分组统计次数
在I2单元格输入公式:
=QUERY(H2:H, "SELECT LEFT(Col1, FIND('|', Col1)-1) AS 类别, RIGHT(Col1, LEN(Col1)-FIND('|', Col1)) AS 值, COUNT(*) AS 次数 WHERE Col1 IS NOT NULL GROUP BY LEFT(Col1, FIND('|', Col1)-1), RIGHT(Col1, LEN(Col1)-FIND('|', Col1)) ORDER BY 类别, 次数 DESC", 1)
按回车后会自动生成按类别分组、各值出现次数的统计表格。
二、自定义脚本方案
适合数据量大、需要一键统计的场景:
- 打开目标Google Sheets,点击顶部菜单「扩展」→「Apps 脚本」。
- 删除默认代码,粘贴以下脚本:
function countCommaSeparatedValues() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const data = sheet.getDataRange().getValues(); const categoryColIndex = 0; // 类别列索引,A列=0,B列=1,以此类推 const result = {}; // 遍历每行数据统计 for (let i = 1; i < data.length; i++) { const category = data[i][categoryColIndex]; if (!category) continue; for (let j = categoryColIndex + 1; j < data[i].length; j++) { const cellValue = data[i][j]; if (!cellValue) continue; const values = cellValue.split(/,\s*/); // 兼容逗号后带空格的格式 values.forEach(val => { if (!result[category]) result[category] = {}; result[category][val] = (result[category][val] || 0) + 1; }); } } // 整理输出格式 const output = [["类别", "值", "次数"]]; Object.keys(result).forEach(category => { Object.keys(result[category]).forEach(val => { output.push([category, val, result[category][val]]); }); }); // 创建新工作表写入结果 const newSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet("统计结果"); newSheet.getRange(1, 1, output.length, output[0].length).setValues(output); }
- 修改脚本中的
categoryColIndex值:如果你的类别列不是A列,比如是B列就改成1,以此类推。 - 点击脚本编辑器顶部的「运行」按钮,授权后即可自动生成名为「统计结果」的新工作表,里面就是按类别统计好的数据。
内容的提问来源于stack exchange,提问作者Sableraph
相关产品推荐
相关产品推荐

