求Google Sheets ArrayFormula:提取每位学生最早/最新测评成绩
自动匹配学生预/后测成绩(Google Sheets)
需求
- 学生首次入机构参加阅读、数学分级测评,全年可多次复测,所有结果存入
Exams表 Master表需自动按学生ID填充当年首次(预测试)、最新(进度测试)测评成绩,未参与则留空- 无需手动查询,实现数据自动同步
现有问题
原公式未按ID精准匹配,无法正确提取对应学生的最早/最新成绩,且需逐列单独设置ARRAYFORMULA:
={"Date";ARRAYFORMULA(if(A4:A="","",vlookup(Exams!A4:A,sort(Exams!A2:F,4,1),4,0)))}
解决方案
1. 提取预测试(最早成绩)
在Master表预测试列的表头下方(如C3)输入以下数组公式,一次性匹配所有学生的最早测评结果:
={"预测试阅读";ARRAYFORMULA(IF(A4:A="","",XLOOKUP(A4:A,Exams!A:A,Exams!C:C,"",0,1)))}
- 逻辑:
XLOOKUP精确匹配学生ID,1参数指定返回最早出现的对应成绩;若Exams表未按日期排序,可嵌套SORT:XLOOKUP(A4:A,SORT(Exams!A:C,4,1),SORT(Exams!A:C,4,1),,0,1)(第4列为日期列,升序排序)
2. 提取进度测试(最新成绩)
在进度测试列表头下方输入:
={"进度测试阅读";ARRAYFORMULA(IF(A4:A="","",XLOOKUP(A4:A,Exams!A:A,Exams!C:C,"",0,-1)))}
- 逻辑:
-1参数指定返回最晚出现的对应成绩,确保取最新测评结果
3. 批量生成多科目成绩
若需同时生成阅读、数学的预/后测列,使用HSTACK合并多列结果,一次性生成4列数据:
={"预测试阅读","预测试数学","进度测试阅读","进度测试数学";ARRAYFORMULA(IF(A4:A="",,HSTACK( XLOOKUP(A4:A,Exams!A:A,Exams!C:C,"",0,1), XLOOKUP(A4:A,Exams!A:A,Exams!D:D,"",0,1), XLOOKUP(A4:A,Exams!A:A,Exams!C:C,"",0,-1), XLOOKUP(A4:A,Exams!A:A,Exams!D:D,"",0,-1) )))}
注意事项
- 确认
Exams表列对应关系:A=学生ID,C=阅读成绩,D=数学成绩,第4列=测评日期(可根据实际列调整公式中的列索引) - 未参与测评的学生将自动留空,无需额外处理
内容的提问来源于stack exchange,提问作者Charity
相关产品推荐
相关产品推荐

