无忧启动论坛

标题: 求教,Excel表格问题 [打印本页]

作者: 123oo456    时间: 2024-1-11 12:20
标题: 求教,Excel表格问题
本帖最后由 123oo456 于 2024-1-11 12:38 编辑

有三张表,分别是学生的3科成绩,现在想把这3张表合并成一张表,每个学生显示3科成绩,已知学号和学生姓名一致,班级排名可以忽略不计,求教怎么操作。
请根据表格实际情况赐教

成绩表.zip

41.39 KB, 下载次数: 54, 下载积分: 无忧币 -2

表格


作者: lxwaft    时间: 2024-1-11 13:00
VLOOKUP函数,挺简单的,不过表格给你调整了一下,规范了
https://wwi.lanzoup.com/iBmOe1ksu8gj

作者: 123oo456    时间: 2024-1-11 13:06
本帖最后由 123oo456 于 2024-1-11 13:11 编辑
lxwaft 发表于 2024-1-11 13:00
VLOOKUP函数,挺简单的,不过表格给你调整了一下,规范了
https://wwi.lanzoup.com/iBmOe1ksu8gj

谢谢,要是从新生成一张表呢?就是表格中什么也没有,全新生成一张表,实现每个学生3科成绩汇总,怎么做,还请指教一下。实际数量有好几千学生许多张表的,有什么简单的办法么?
作者: lxwaft    时间: 2024-1-11 13:18
123oo456 发表于 2024-1-11 13:06
谢谢,要是从新生成一张表呢?就是表格中什么也没有,全新生成一张表,实现每个学生3科成绩汇总,怎么做 ...

那 就用方方格子的汇总大师吧,前提原始表得规范
作者: 123oo456    时间: 2024-1-11 13:20
lxwaft 发表于 2024-1-11 13:18
那 就用方方格子的汇总大师吧,前提原始表得规范

试过了
没弄明白
没实现了我要的效果,不知道是不是操作的问题
作者: 123oo456    时间: 2024-1-11 13:25
lxwaft 发表于 2024-1-11 13:18
那 就用方方格子的汇总大师吧,前提原始表得规范

方方格子的汇总大师里怎么操作?能具体指导一下么
作者: martin313    时间: 2024-1-11 13:42
123oo456 发表于 2024-1-11 13:25
方方格子的汇总大师里怎么操作?能具体指导一下么


安装了方方格子,启动Excel ,就可以看到方方格子的加载项,里面有合并的功能,自己琢磨一下,就出来了
作者: 123oo456    时间: 2024-1-11 13:43
martin313 发表于 2024-1-11 13:42
安装了方方格子,启动Excel ,就可以看到方方格子的加载项,里面有合并的功能,自己琢磨一下,就出来了

没成功,成功不就不在这问了。能指导一下么

作者: martin313    时间: 2024-1-11 13:53
123oo456 发表于 2024-1-11 13:43
没成功,成功不就不在这问了。能指导一下么

特地下载了附件,看到你的那种希望的效果表,看不出来是要把一个学生的3科成绩都在这表上

这与你主楼的文字表述都不一致

我都被整糊涂了,不知你到底是想要什么样
作者: lxwaft    时间: 2024-1-11 13:54
本帖最后由 lxwaft 于 2024-1-11 13:56 编辑

参照图片,最后删除多余列

1.jpg (68.45 KB, 下载次数: 66)

1.jpg

2.jpg (84.58 KB, 下载次数: 63)

2.jpg

3.jpg (106.9 KB, 下载次数: 63)

3.jpg

4.jpg (346.68 KB, 下载次数: 65)

4.jpg

作者: 123oo456    时间: 2024-1-11 14:13
lxwaft 发表于 2024-1-11 13:54
参照图片,最后删除多余列

哪个版本的方方格子,我昨天在方方格子官方网站下载的最新版的怎么没找到这个菜单呢
作者: lxwaft    时间: 2024-1-11 14:15
本帖最后由 lxwaft 于 2024-1-11 14:16 编辑

安装完方方格子,开始菜单--方方格子--excel汇总大师极速版
我用的3.9.2

作者: lxwaft    时间: 2024-1-11 14:19
https://wwi.lanzoup.com/ika9M1kt910b
如果没有,应该是会员才有吧,给你个单独汇总大师。
作者: reninhouse    时间: 2024-1-11 14:21
用vlookup函数,很快
作者: couldfly    时间: 2024-1-11 14:24
数据透视可以生成新表格
作者: 123oo456    时间: 2024-1-11 14:26
lxwaft 发表于 2024-1-11 14:19
https://wwi.lanzoup.com/ika9M1kt910b
如果没有,应该是会员才有吧,给你个单独汇总大师。


这一步不一样
结果也不一样


作者: 123oo456    时间: 2024-1-11 14:30
不一样的结果,错在哪里呢

1.png (21.06 KB, 下载次数: 75)

1.png

360截图20240111142828557.png (40.95 KB, 下载次数: 63)

360截图20240111142828557.png

360截图20240111142923884.png (17.84 KB, 下载次数: 62)

360截图20240111142923884.png

作者: 123oo456    时间: 2024-1-11 14:33
couldfly 发表于 2024-1-11 14:24
数据透视可以生成新表格

能教一下么
作者: 123oo456    时间: 2024-1-11 14:36
lxwaft 发表于 2024-1-11 14:19
https://wwi.lanzoup.com/ika9M1kt910b
如果没有,应该是会员才有吧,给你个单独汇总大师。

是修改了各科表格了么,我没有修改各科表格不成功。因为收来的表格很多,所以尽可能不修改原始表格。
作者: couldfly    时间: 2024-1-11 14:37
123oo456 发表于 2024-1-11 14:33
能教一下么

不会的话可以网上搜索一下教程。讲起来很挺麻烦的。
作者: 5016977    时间: 2024-1-11 15:26
历害了,方方格子还是功能强大
作者: pbmmm    时间: 2024-1-11 15:35
学习学习
作者: siwa447    时间: 2024-1-11 15:38
本帖最后由 siwa447 于 2024-1-11 15:40 编辑

VBA
作者: shy20070509    时间: 2024-1-11 15:41
学习一下
作者: likeyouli    时间: 2024-1-11 15:54
123oo456 发表于 2024-1-11 13:06
谢谢,要是从新生成一张表呢?就是表格中什么也没有,全新生成一张表,实现每个学生3科成绩汇总,怎么做 ...

表多的话就用vba,,不过你这每科成绩的表够乱的,学号 姓名 分数等竟然有3列
   今天有空,可以打包给我,我帮你弄好
作者: 123oo456    时间: 2024-1-11 16:49
likeyouli 发表于 2024-1-11 15:54
表多的话就用vba,,不过你这每科成绩的表够乱的,学号 姓名 分数等竟然有3列
   今天有空,可以打包给 ...

谢谢,是县里统一汇总,各单位上报的不一致造成的,已经叫他们统一规范表格啦
作者: lxwaft    时间: 2024-1-11 17:00
123oo456 发表于 2024-1-11 14:36
是修改了各科表格了么,我没有修改各科表格不成功。因为收来的表格很多,所以尽可能不修改原始表格。


是原始表规范了一下,像你原来那样的,只能vba了
作者: likeyouli    时间: 2024-1-11 17:17
123oo456 发表于 2024-1-11 16:49
谢谢,是县里统一汇总,各单位上报的不一致造成的,已经叫他们统一规范表格啦

你也在县里上班啊,,咱们一样
  我学习vba 就是因为经常罗罗数据,,下边报上来的数据,最麻烦的是报上来的数据五花八门,有的甚至有空行、隐藏行,所以数据规整很重要,否则就是合并了也会出问题。
   如果按你发的,都是AFK列是学号,BGL列是姓名,那vba写起来也很简单
作者: linshi456    时间: 2024-1-11 17:28
建议楼主去Excelhome论坛学习学习,那里专门学习Excel论坛,海量学习资源
作者: dayeye    时间: 2024-1-11 17:49
学习了
作者: wxinchun92    时间: 2024-1-11 18:34
VBA在合适不过了
作者: 紧急追踪    时间: 2024-1-11 19:19
收藏了,谢谢
作者: nathan6498    时间: 2024-1-11 19:25
学习学习
作者: 2012mulinsen    时间: 2024-1-11 20:40
都是高手啊
作者: lotus136    时间: 2024-1-11 21:02
过来学习学习
作者: xsg123456    时间: 2024-1-11 21:13
本帖最后由 xsg123456 于 2024-1-11 22:08 编辑
  1. function collectAll(){
  2. let path = ThisWorkbook.Path,
  3. files = ["语文","数学","英语"],
  4. obj = {}
  5. files.forEach(name =>{
  6. let wb = Application.Workbooks.Open( path + `\\${name}.xlsx`)
  7. let tmp = wb.Sheets("Sheet1").Range("a2").CurrentRegion.Value2.slice(1)
  8. tmp.forEach(v => {
  9. let key = [v[0] , v[1] , v[3]]
  10. obj[key] = obj[key]? [...obj[key],v[2]] : [v[2]]
  11. key = [v[5] , v[6] , v[8]]
  12. obj[key] = obj[key]? [...obj[key],v[7]] : [v[7]]
  13. key = [v[10] , v[11] , v[13]]
  14. obj[key] = obj[key]? [...obj[key],v[12]] : [v[12]]
  15. })
  16. wb.Close()
  17. })
  18. let res1 = Object.keys(obj).map(v=>v.split(",")),
  19. res2 = Object.values(obj)
  20. res1.unshift(["学号","姓名","班号"])
  21. res2.unshift(files)
  22. res = res1.map((v,i)=> [v[0],v[1],...res2[i],v[2]]).sort((a,b)=>a[0]-b[0]).filter(v => v[0])
  23. Range("a2").CurrentRegion.ClearContents()
  24. Range("a2").Resize(res.length,res[0].length).Value2 = res

  25. }
复制代码


作者: xsg123456    时间: 2024-1-11 21:25




作者: xsg123456    时间: 2024-1-11 21:30
本帖最后由 xsg123456 于 2024-1-11 21:51 编辑

成绩表.7z (24.33 KB, 下载次数: 14)


终于传上了附件
忘记说了,wps下开启宏即可食用

作者: ppll2030    时间: 2024-1-11 21:52
https://www.123pan.com/s/fvglVv-DX2Nv.html
三张成绩表最好统一一列。这样有利于统计、汇总和查漏。
汇总表是根据学号匹配各科成绩的。只要把对应的三科成绩复制到对应的工作表里即可。
如果非要横向三组排列的排版。建议检查无误后,复制一份副本重新排版。

作者: JOINT    时间: 2024-1-11 22:00
谢谢分享
作者: 15126222223    时间: 2024-1-11 22:15
ppll2030 发表于 2024-1-11 21:52
https://www.123pan.com/s/fvglVv-DX2Nv.html
三张成绩表最好统一一列。这样有利于统计、汇总和查漏。
汇 ...

你做的思路不错。
作者: xsg123456    时间: 2024-1-11 22:56
本帖最后由 xsg123456 于 2024-1-11 23:27 编辑

给你做 原表不动 新表自动生成  自动总分 排名 的一键版

  1. function collectAll(){
  2. Application.ScreenUpdating = false
  3. let path = ThisWorkbook.Path,
  4.      files = ["语文","数学","英语"],
  5.      obj = {} , res = []
  6. files.forEach(name =>{
  7.   let wb = Application.Workbooks.Open( path + `\\${name}.xlsx`)
  8.   let tmp = wb.Sheets("Sheet1").Range("a2").CurrentRegion.Value2.slice(1)
  9.   tmp.forEach(v => {
  10.    let key = [v[0] , v[1]]
  11.    obj[key] = obj[key]? [...obj[key],v[2]] : [v[2]]
  12.    key = [v[5] , v[6] ]
  13.    obj[key] = obj[key]? [...obj[key],v[7]] : [v[7]]
  14.    key = [v[10] , v[11]]
  15.    obj[key] = obj[key]? [...obj[key],v[12]] : [v[12]]
  16.   })
  17.   wb.Close()
  18. })
  19. let res1 = Object.keys(obj).map(v=>v.split(",")),
  20.   res2 = Object.values(obj).map(v => [...v,v.reduce((p,c) => p*1+c*1)])
  21. res1.unshift(["学号","姓名"])
  22. res2.unshift(["语文","数学","英语","总分"])
  23. res = res1.map((v,i)=> [v[0],v[1],...res2[i]]).sort((a,b)=>b[5]-a[5]).filter(v => v[0])
  24. res = res.map((v,i) => {
  25.   if (i == 0) {
  26.    return [...v,"班级排名"]
  27.   }else{
  28.    return [...v,i]
  29.   }
  30. })
  31.     Range("a2").CurrentRegion.ClearContents()
  32. Range("a2").Resize(res.length,res[0].length).Value2 = res
  33. Application.ScreenUpdating = true   
  34. }
复制代码
成绩表.7z (24.45 KB, 下载次数: 20)


作者: lixiangliuyi    时间: 2024-1-12 00:09
语数外都排版整齐不要分成3版,

然后以语文(随便那个为模板),新建列数学英语成绩
C#引用epplus,写个方法,根据姓名去其他的表中查找对应的成绩并输出在模板对应的成绩栏目,再写个for循环搞定。
作者: likeyouli    时间: 2024-1-12 08:42
xsg123456 发表于 2024-1-11 21:13

这是啥 ?  有的地方像vba,感觉又不是
作者: 20121666    时间: 2024-1-12 08:51
likeyouli 发表于 2024-1-11 17:17
你也在县里上班啊,,咱们一样
  我学习vba 就是因为经常罗罗数据,,下边报上来的数据,最麻烦的是报 ...

就是呗,上报信息一点都不规范,主要是不认真,还不听话。
作者: 20121666    时间: 2024-1-12 08:54
xsg123456 发表于 2024-1-11 22:56
给你做 原表不动 新表自动生成  自动总分 排名 的一键版

需要慢慢消化,谢谢,主要是不常接触,自己又笨。以后有问题还请多指教。
作者: 20121666    时间: 2024-1-12 08:56
lixiangliuyi 发表于 2024-1-12 00:09
语数外都排版整齐不要分成3版,

然后以语文(随便那个为模板),新建列数学英语成绩

基层单位报表就这样的,不是一天两天的事。很难改变。
作者: 车丁    时间: 2024-1-12 08:59
学习使用XLOOKUP或VLOOKUP函数,你会发现很多数据都非常方便处理,不过要新版本的OFFICE才支持XLOOKUP。XLOOKUP比VLOOKUP好用,
作者: 20121666    时间: 2024-1-12 09:04
ppll2030 发表于 2024-1-11 21:52
https://www.123pan.com/s/fvglVv-DX2Nv.html
三张成绩表最好统一一列。这样有利于统计、汇总和查漏。
汇 ...

文件中只是一个例子,各个单位的报表非常多,看到的只是冰山一角,都这样改一遍不现实。所以才请教各位高手看看有什么简单的解决办法。
作者: zlzx01    时间: 2024-1-12 09:13
好帖!!!!!
作者: ppll2030    时间: 2024-1-12 09:50
20121666 发表于 2024-1-12 09:04
文件中只是一个例子,各个单位的报表非常多,看到的只是冰山一角,都这样改一遍不现实。所以才请教各位高 ...

简单的办法就是统一报表格式。需要数据,就下发一份统一模板填写。
如果你说得上话就这么办,说不上就让说得上话的人去办
在我们单位,数据岗的表格只要不统一,一律发回重做。
影响统计时间的,责任到当地领导。
当然,如果你的例子已经是统一模板,可以考虑用复杂点的vba汇总了。
不管什么办法,都不是万能呢。就比如你的英语表格,是顶行填写的,语文和数学却又留空一行。
填写位置不统一,这个对于自动化也算是个坑了。
作者: 20121666    时间: 2024-1-12 09:55
ppll2030 发表于 2024-1-12 09:50
简单的办法就是统一报表格式。需要数据,就下发一份统一模板填写。
如果你说得上话就这么办,说不上就让 ...

主要是我们部门只是配合完成,有些工作是临时的。
作者: xsg123456    时间: 2024-1-12 10:19
likeyouli 发表于 2024-1-12 08:42
这是啥 ?  有的地方像vba,感觉又不是

wps支持vba宏的同时也支持js宏,因此可以跨平台使用,国产linux系统可以运行js宏,我们称他为jsa
作者: xsg123456    时间: 2024-1-12 10:21
20121666 发表于 2024-1-12 08:54
需要慢慢消化,谢谢,主要是不常接触,自己又笨。以后有问题还请多指教。

这种不规范的表,没法子,只有编程对付
作者: tanchenglong    时间: 2024-1-12 16:40
WPS最新版,直接带工作汇总功能,速度更快
作者: 123oo456    时间: 2024-1-13 08:02
tanchenglong 发表于 2024-1-12 16:40
WPS最新版,直接带工作汇总功能,速度更快

对基础表格有要求的,这种的实现不了。
作者: 123oo456    时间: 2024-1-21 17:22
xsg123456 发表于 2024-1-11 22:56
给你做 原表不动 新表自动生成  自动总分 排名 的一键版

你好,最近一直在研究你给的那段代码,就是前几天解决EXCEL汇总的那段代码,实际工作中遇到问题,如果有学生缺考一门或者两门就会造成无法统计,需要怎么修改呢,还请大佬指教一下。
另外学习wps的js在哪里有资料可以参考学习,纯属个人爱好,解决一些生活中的小问题的,都需要学习什么
作者: maowang    时间: 2024-1-21 17:31
fg
作者: promrhxq    时间: 2024-1-21 17:31
Excel表格   前来学习了
作者: xsg123456    时间: 2024-1-21 19:35
本帖最后由 xsg123456 于 2024-1-21 19:54 编辑
123oo456 发表于 2024-1-21 17:22
你好,最近一直在研究你给的那段代码,就是前几天解决EXCEL汇总的那段代码,实际工作中遇到问题,如果有 ...


js网上一大堆教程,比如菜鸟教程。至于wps 有关api,官网open.wps.cn。您说的情况代码修改在下楼
作者: xsg123456    时间: 2024-1-21 19:52
本帖最后由 xsg123456 于 2024-2-1 15:48 编辑
123oo456 发表于 2024-1-21 17:22
你好,最近一直在研究你给的那段代码,就是前几天解决EXCEL汇总的那段代码,实际工作中遇到问题,如果有 ...
  1. function main(){
  2.         //主程序
  3.         let  files = ["语文","数学","英语"]
  4.         let data = sjqx(files).map(v=>(v.splice(4,1),v))
  5.         data.unshift(["学号","姓名","得分","座号","科目"])
  6.         let res = flhz(data)
  7.         Range("a1").ClearContents()
  8.         Range("a1").Resize(res.length,res[0].length).Value2 = res
  9.        
  10. }


  11. function flhz(data){
  12.         //分类汇总
  13.         let [rowN,colN,row,col,res] = [0,0,{},{},[]]
  14.         data.forEach((cur) =>{
  15.                 if(!row[cur[1]]){
  16.                         row[cur[1]] = rowN ++
  17.                         res.push([cur[0],cur[1],cur[3]])
  18.                 }
  19.                 if(!col[cur[4]]) {
  20.                         col[cur[4]] = 3 + colN ++
  21.                         res[0][col[cur[4]]] = cur[4]
  22.                         res[row[cur[1]]][col[cur[4]]]= cur[2]
  23.                 } else{
  24.                         res[row[cur[1]]][col[cur[4]]]= cur[2]
  25.                 }
  26.                
  27.         })
  28.         res = res.map(v=>(v[3]=v[6]+v[4]+v[5],v)).sort((a,b)=>b[3]-a[3])
  29.         return res
  30. }

  31. function readLine(arr){
  32.         //一行重复数据切割
  33.         let tmp = []
  34.         while(arr.length>0){
  35.                 if (arr.length>5) {
  36.                         tmp.push(arr.splice(0,5))
  37.                 }else{
  38.                         tmp.push(arr.splice(0))
  39.                 }
  40.         }
  41.         return tmp
  42. }

  43. function sjqx(files){
  44.         //数据清洗
  45.         let path = ThisWorkbook.Path
  46.         let data =[]
  47.         files.forEach(name =>{
  48.                 let wb = Application.Workbooks.Open( path + `\\${name}.xlsx`)
  49.                 let tmp = wb.Sheets("Sheet1").Range("a2").CurrentRegion.Value2.slice(1)
  50.                 tmp = tmp.map(v => readLine(v)).flat().filter(v => v[0])
  51.                 tmp = tmp.map (v => [...v,name])
  52.                 data.push(...tmp)
  53.                 wb.Close()               
  54.    })
  55.    return data
  56. }
复制代码


作者: 无犹启动    时间: 2024-1-24 17:25
学习学习
作者: 此生有求    时间: 2024-1-24 17:27
大神还是多,以后有不懂有指望了
作者: hehuiying    时间: 2024-4-19 15:55
谢谢分享




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3