学生多科目注册场景:如何跨列筛选表格信息并展示到另一表格?
多对多学生-科目关系表格自动更新方案
问题分析
原公式仅检查Table 1的B列,无法覆盖B列之后新增的科目列,因此需要遍历所有科目列,筛选出所有注册了目标科目的学生。
改进公式方案(适用于Google Sheets)
在表格2的B2单元格输入以下公式,下拉填充即可:
=TRANSPOSE(FILTER('Table 1'!A:A, BYROW('Table 1'!B:ZZ, LAMBDA(row, A2 IN row))))
BYROW('Table 1'!B:ZZ, LAMBDA(row, A2 IN row)):遍历Table 1中B到ZZ的所有行(可根据实际科目列范围调整),检查当前行是否包含表格2A列的目标科目,返回布尔值数组。FILTER('Table 1'!A:A, ...):根据布尔数组筛选出对应的学生姓名。TRANSPOSE(...):将纵向筛选结果转为横向排列,匹配表格2的展示格式。
替代方案(适用于Excel 365及以上版本)
若使用Excel,可使用以下公式:
=TRANSPOSE(FILTER(Table1[学生], MMULT(--(Table1[#All] = A2), SEQUENCE(COLUMNS(Table1)-1,,1,0))>0))
--(Table1[#All] = A2):将表格1中所有单元格与目标科目的匹配结果转为0/1数组。MMULT(..., SEQUENCE(...)):计算每行的匹配总和,大于0表示该行学生注册了目标科目。FILTER和TRANSPOSE的作用与Google Sheets版本一致。
更简洁的Google Sheets方案(利用FLATTEN+QUERY)
=TRANSPOSE(QUERY( FLATTEN({SPLIT(REPT('Table 1'!A:A&"|", COUNTA('Table 1'!B:ZZ)/ROWS('Table 1'!A:A)), "|"), 'Table 1'!B:ZZ}), "SELECT Col1 WHERE Col2 = '"&A2&"' AND Col2 IS NOT NULL", 0 ))
该方案先将学生姓名与对应科目逐一配对,再通过QUERY筛选出目标科目的学生,最后转置排列。
内容的提问来源于stack exchange,提问作者Anonymous User
相关产品推荐
相关产品推荐

