ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 多表合计排名(用函数)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-18 14:15 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 Anny-Zh 于 2019-10-18 15:24 编辑

QQ图片20191018152212.png QQ图片20191018113040.png 分表汇总排名次.rar (14.62 KB, 下载次数: 9)

我有n个这样的表,然后需要根据不同科目汇总排名,想只用函数实现,麻烦各位帮帮忙


如果改成这样呢,应该可以实现了吧

点评

学号列附上,不会重复  发表于 2019-10-18 14:24

TA的精华主题

TA的得分主题

发表于 2019-10-18 14:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
首先得有个人员名单才好,否则用函数多表去重怪麻烦的

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-18 14:22 | 显示全部楼层
micch 发表于 2019-10-18 14:19
首先得有个人员名单才好,否则用函数多表去重怪麻烦的

我也想过这个问题,直接在每个表做个去重人员名单再来排名可以吗?

TA的精华主题

TA的得分主题

发表于 2019-10-18 14:28 | 显示全部楼层
Anny-Zh 发表于 2019-10-18 14:22
我也想过这个问题,直接在每个表做个去重人员名单再来排名可以吗?

可以啊,分步完成,每个表做一次高级筛选,得到各班名单,然后sumifs得出总分,然后在汇总表生成透视表,然后排序。或者在汇总表用函数得到总表。N多个表的话,不如代码完成省事。

或者也可以试试直接透视表看行不行,透视表不熟悉不知道能不能做到

TA的精华主题

TA的得分主题

发表于 2019-10-18 14:44 | 显示全部楼层
为啥非要用函数呢?这样很麻烦的。用PQ多方便啊,还能自动刷新。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-18 14:45 | 显示全部楼层
micch 发表于 2019-10-18 14:28
可以啊,分步完成,每个表做一次高级筛选,得到各班名单,然后sumifs得出总分,然后在汇总表生成透视表, ...

就是用透视表的话,每个表都做个透视表太麻烦了,想说能不能直接一个函数实现,下次又有新的分数就能直接覆盖原来的表得出结果了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-18 14:47 | 显示全部楼层
dipperrrr 发表于 2019-10-18 14:44
为啥非要用函数呢?这样很麻烦的。用PQ多方便啊,还能自动刷新。

因为我不单单要做排名数据,还有其他的分析表,然后班次的数据是固定的,但是每次考完又得全部重新操作一次就很麻烦,想把其他数据表贴在同一个工作簿里,然后只要考试成绩一出来,直接贴回这个工作簿里,我的数据表就全部出来了

TA的精华主题

TA的得分主题

发表于 2019-10-18 14:49 | 显示全部楼层
vba 不懂  反正让pq来做是很简单的,先多表合并,按班级 人名分组,在组里筛科目,对成绩求和,再排序, 用函数来的话,考虑到不同班级里人名还有可能重复,这几个嵌套就够受的,非要指定用函数的话,只能。。。。。找大神

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-18 14:53 | 显示全部楼层
libo5563 发表于 2019-10-18 14:49
vba 不懂  反正让pq来做是很简单的,先多表合并,按班级 人名分组,在组里筛科目,对成绩求和,再排序, 用 ...

我的每个班级表的数据太大了合并会崩的

TA的精华主题

TA的得分主题

发表于 2019-10-18 15:10 | 显示全部楼层
本帖最后由 micch 于 2019-10-18 16:05 编辑
Anny-Zh 发表于 2019-10-18 14:45
就是用透视表的话,每个表都做个透视表太麻烦了,想说能不能直接一个函数实现,下次又有新的分数就能 ...

透视表可以多个工作表生成一个透视表,多字段透视表;不太会,只好代码做一个了,函数一步到位怕是做不到了,函数需要通过辅助来完成

  1. Sub test()
  2.     Application.DisplayAlerts = False
  3.     Set d = CreateObject("scripting.dictionary")
  4.     For Each sh In Sheets
  5.         If sh.Name <> "排名" Then
  6.             arr = Intersect(sh.UsedRange, sh.[a:c])
  7.             For i = 1 To UBound(arr)
  8.                 If InStr("语文@数学@英语", arr(i, 2)) Then
  9.                     d(sh.Name & "@" & arr(i, 1)) = arr(i, 3) + d(sh.Name & "@" & arr(i, 1))
  10.                 End If
  11.             Next
  12.         End If
  13.     Next
  14.     With Sheets("排名")
  15.         .[b2].Resize(d.Count, 3).ClearContents
  16.         .[b2].Resize(d.Count) = Application.Transpose(d.keys)
  17.         .[d2].Resize(d.Count) = Application.Transpose(d.items)
  18.         .[a2].Resize(d.Count).Formula = "=row()-1"
  19.         .[b2].Resize(d.Count).TextToColumns OtherChar:="@"
  20.         .[b2].Resize(d.Count, 3).Sort .[d1], 2
  21.     End With
  22.     Application.DisplayAlerts = True
  23. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-24 23:47 , Processed in 0.047162 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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