ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 523|回复: 12

[已解决] 赋分制后拆分年级成绩单

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-27 10:22 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
实行赋分制后,整个年级的成绩单里就会有多个组合(成绩单里“未上传”就是说这个班所选组合里没有这一科)拆分各班的成绩单的时候就不能单纯的按班级来拆分了,需要把这个班级不参与考试的科目去掉。
image.png image.png

所以需求如下:

  • 按班级将年级成绩单拆分至相应班级的sheet里。
  • 省掉不必要的科目列——如377班不选政治历史地理,所以377sheet成绩单里就不能出现政治历史地理的标题。
  • 第一个sheet为年级成绩单,每次只需要将处理好的新的原始成绩单复制进去,后面班级成绩单自动更新。
  • 最好能够根据提前复制好的标题自动提取需要的列数据,
  • 不想用vlookup(或者xlookup)的原因是担心匹配容易出错,不管是学生姓名不一致还是什么原因,每一列和前一列的数据都可能出现错位的情况。



我目前遇到的思路是用choosecols+match来自动匹配各个科目列,但有一个问题是各科目“校排”列的标题都一样,如果匹配的话很容易匹配错。而且如果用choosecols的话,需要把每列的列序号都写上,就很麻烦。



  • 我提前把每个班的标题先复制好,可以从A2单元格开始使用公式
  • 用的是Microsoft office 365版本的excel,可以用很多数组公式。


求大佬指点。

成绩单筛选简版.7z

79.07 KB, 下载次数: 15

TA的精华主题

TA的得分主题

发表于 2024-7-28 22:00 | 显示全部楼层
每一列和前一列的数据都可能出现错位的情况。
这个指的是比如英、校可能会变成校、英还是什么

TA的精华主题

TA的得分主题

发表于 2024-7-28 22:23 | 显示全部楼层
image.jpg
=LET(s,VSTACK(多科成绩单!A1:V1,FILTER(多科成绩单!A2:V630,多科成绩单!A2:A630=375)),FILTER(s,BYCOL(--(TAKE(s,-1)<>{"未上传";"--"}),SUM)=2))

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-28 23:01 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
高个子 发表于 2024-7-28 22:00
每一列和前一列的数据都可能出现错位的情况。
这个指的是比如英、校可能会变成校、英还是什么

是指如果出现学生姓名重复的话,就会匹配错成绩。所以我更倾向于直接用类似filter这种数组提取的函数来提取所有符合条件的数据

TA的精华主题

TA的得分主题

发表于 2024-7-30 21:07 | 显示全部楼层
冰皮小饼干 发表于 2024-7-28 23:01
是指如果出现学生姓名重复的话,就会匹配错成绩。所以我更倾向于直接用类似filter这种数组提取的函数来提 ...
  1. =LET(s,VSTACK(多科成绩单!A1:V1,FILTER(多科成绩单!A2:V630,多科成绩单!A2:A630=--MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,9))),FILTER(s,BYCOL(--(TAKE(s,-1)<>{"未上传";"--"}),SUM)=2))
复制代码


改一下3楼的,这个升级至365beta版,还需要你自己手动建表,表名是班级名称。做完以后立刻将公式复制在a1单元格,回车即可

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-30 22:56 | 显示全部楼层
  1. =LET(x,MATCH(A1:O1,多科成绩单!A1:V1,),CHOOSECOLS(FILTER(多科成绩单!A:V,多科成绩单!A:A=--RIGHT(CELL("filename"),3)),IF(MOD(COLUMN(A1:P1),2),x,HSTACK(0,x)+1)))
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-31 19:48 | 显示全部楼层
Python+Pandas:
import pandas as pd

df = pd.read_excel('pandas exercise/sample342.xlsx', '多科成绩单', na_values=['未上传', '--'], index_col=[0, 1, 2])
df = df.stack()
with pd.ExcelWriter('pandas exercise/sample342_results.xlsx', engine='xlsxwriter') as w:
    for item in df.index.get_level_values(0).unique():
        df1 = df.loc[item, :].unstack()
        df1.columns = df1.columns.str.replace(r'校排\.\d', '校排', regex=True)
        df1.to_excel(w, sheet_name=str(item))

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-2 11:05 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
哇,大佬好多!!!小弟膜拜膜拜膜拜你们!!!

TA的精华主题

TA的得分主题

发表于 2024-8-2 11:25 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-5 16:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ericxzhou 发表于 2024-7-31 19:48
Python+Pandas:
import pandas as pd

python对我来说就更难了,毕竟我是真的没学过。谢谢大佬吖!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 16:19 , Processed in 0.036261 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表