Google Sheet技术求助:将学生行内非空科目成绩及科目名紧凑整理
解决Google Sheets中每行学生非空科目成绩的横向紧凑排列问题
嘿,我完全懂你要实现的效果——把每行学生那些非空的科目成绩(带着对应科目名称)集中到表格末尾,按横向紧凑排列,同时保持A列的姓名纵向对齐对吧?之前找到的数组公式方向不对,那我给你适配两个实用的方案,按需选择:
方案1:将所有非空科目成绩合并到一个单元格(用分隔符区分)
如果希望每个学生的所有成绩都放在同一个单元格里,用分隔符隔开(比如「数学: 90 | 英语: 85」),可以在第一个结果单元格(比如AA2)输入这个数组公式:
=ARRAYFORMULA(IF(A2:A="",,BYROW(B2:Z,LAMBDA(row_data,TEXTJOIN(" | ", TRUE, IF(row_data<>"", B1:Z1&": "&row_data, ""))))))
公式说明:
ARRAYFORMULA:让公式自动应用到整列,不用手动下拉填充IF(A2:A="",,):跳过A列没有姓名的空行,避免无效内容BYROW(B2:Z, LAMBDA(row_data, ...)):逐行遍历B到Z列的成绩数据TEXTJOIN(" | ", TRUE, ...):用「 | 」作为分隔符拼接所有有效条目,TRUE参数自动忽略空值IF(row_data<>"", B1:Z1&": "&row_data, ""):判断单元格非空时,把科目名称和成绩拼接成「科目: 成绩」的格式
方案2:将每个科目成绩拆分成单独的横向列
如果希望每个科目成绩单独占一列(比如AA列是第一个非空成绩,AB列是第二个,以此类推),可以在AA2单元格输入这个数组公式:
=ARRAYFORMULA(IF(A2:A="",,BYROW(B2:Z,LAMBDA(row_data,TRANSPOSE(FILTER(B1:Z1&": "&row_data, row_data<>""))))))
公式说明:
FILTER(B1:Z1&": "&row_data, row_data<>""):筛选出当前行所有非空的科目+成绩条目TRANSPOSE(...):把筛选出的纵向结果转成横向排列,自动依次填充到右侧列- 同样通过
BYROW逐行处理,ARRAYFORMULA实现整列自动适配
自定义调整提示:
- 范围修改:如果你的科目列不是B到Z,比如是B到D,就把公式里的
B2:Z改成B2:D,B1:Z1改成B1:D1 - 格式修改:不想用「科目: 成绩」格式的话,比如改成「科目-成绩」,把
B1:Z1&": "&row_data替换成B1:Z1&"-"&row_data即可 - 分隔符修改:方案1里的「 | 」可以换成任意符号,比如「, 」或者换行符
CHAR(10)(记得开启单元格自动换行)
内容的提问来源于stack exchange,提问作者Fennomenon
相关产品推荐
相关产品推荐

