You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:17:57