能否用Google Sheets QUERY或Apps Script实现数值区间文本映射?
解决方案:用QUERY函数或Apps Script实现分数区间分类
一、使用QUERY函数实现
Google Sheets的QUERY函数支持SQL风格的CASE WHEN语句,能高效完成区间分类,无需嵌套多层IF。假设你的数据在A列(Ref.No.)和B列(Avg.Score),表头在第1行,在C2单元格输入以下公式即可生成类别列:
=QUERY(A:B, "SELECT A, B, CASE WHEN B <= 3.74 THEN 'N/A' WHEN B >= 3.75 AND B <=7.4 THEN 'Poor' WHEN B >=7.5 AND B <=11.24 THEN 'Adequate' WHEN B >=11.25 AND B <=15.9 THEN 'Very Good' WHEN B >15.9 THEN 'Excellent' END AS Category WHERE A IS NOT NULL", 1)
说明:
- 明确每个区间的上下限避免逻辑冲突(你给出的区间中
>15和11.25-15.9存在重叠,这里调整为>15.9对应Excellent;若需严格按你描述的>15,可将最后一个条件改为WHEN B >15 THEN 'Excellent',但此时15.0-15.9的分数会优先匹配前面的Very Good区间) WHERE A IS NOT NULL用于过滤空行- 最后一个参数
1表示数据包含表头
二、使用Apps Script实现自定义函数
如果需要更灵活的处理(比如后续修改区间只需调整脚本),可以编写自定义函数:
- 打开Google Sheets,点击菜单栏「扩展程序」→「Apps Script」
- 删除默认代码,粘贴以下脚本:
function getScoreCategory(score) { if (score === "" || score === null) return ""; if (score <= 3.74) return "N/A"; if (score >= 3.75 && score <=7.4) return "Poor"; if (score >=7.5 && score <=11.24) return "Adequate"; if (score >=11.25 && score <=15.9) return "Very Good"; if (score >15.9) return "Excellent"; return "Unknown"; // 处理超出所有区间的异常值 }
- 保存脚本(命名为ScoreCategory),回到表格
- 在C2单元格输入
=getScoreCategory(B2),下拉填充即可为所有分数生成类别
批量处理脚本(可选)
如果需要一次性为整列添加类别,可使用以下脚本自动填充:
function batchAddCategories() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const dataRange = sheet.getDataRange(); const values = dataRange.getValues(); // 从第2行开始遍历(假设第1行是表头) for (let i = 1; i < values.length; i++) { const score = values[i][1]; // B列是Avg.Score let category = ""; if (score <= 3.74) category = "N/A"; else if (score >= 3.75 && score <=7.4) category = "Poor"; else if (score >=7.5 && score <=11.24) category = "Adequate"; else if (score >=11.25 && score <=15.9) category = "Very Good"; else if (score >15.9) category = "Excellent"; else category = "Unknown"; sheet.getRange(i+1, 3).setValue(category); // 将类别写入C列 } }
运行该脚本后,会自动在C列填充所有分数对应的类别。
内容的提问来源于stack exchange,提问作者Diana Bingham
相关产品推荐
相关产品推荐

