ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助:用VBA提取数据并进行排名

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-4-19 21:30 | 显示全部楼层
wuchengde 发表于 2019-4-19 21:25
是的,只统计所选年级的,其他不用管,排序排不排都没关系,排序我可以根据总分进行排的,要是能一起考虑 ...

明天试试,应该可以

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-19 21:33 | 显示全部楼层
mjzxlmg 发表于 2019-4-19 21:28
关键是这种没有规律的表格写出来的代码通用性不强呀。同是科目,语文跟其它科目不同, 科目顺序乱了判断太 ...

没办法啊,领导要将语文的基础知识和作文分开来看啊,我也头痛啊。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-19 21:34 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-19 21:38 | 显示全部楼层
mjzxlmg 发表于 2019-4-19 21:28
关键是这种没有规律的表格写出来的代码通用性不强呀。同是科目,语文跟其它科目不同, 科目顺序乱了判断太 ...

科目顺序固定为:语文、数学、英语、科学、品德

不会变位置的。

TA的精华主题

TA的得分主题

发表于 2019-4-20 01:55 | 显示全部楼层
  1. Option Explicit
  2. Sub 主程序()
  3.     Dim sht As Worksheet
  4.     For Each sht In Sheets
  5.         If sht.Name = "成绩总表(" & Sheets("基本信息设置").Range("d2").Value & ")" Then
  6.             If MsgBox("该表已存在,是否覆盖?", 33, "提醒!") = vbOK Then
  7.                 Application.DisplayAlerts = False
  8.                 Sheets("成绩总表(" & Sheets("基本信息设置").Range("d2").Value & ")").Delete
  9.                 Application.DisplayAlerts = True
  10.                 Exit For
  11.             Else
  12.                 Exit Sub
  13.             End If
  14.         End If
  15.     Next
  16.     Call 生成年级成绩
  17. End Sub


  18. Sub 生成年级成绩()
  19.     Dim i, r, arow&
  20.    
  21.     Call 清除格式
  22.    
  23.     Sheets("mb").Copy after:=Sheets("基本信息设置")
  24.     ActiveSheet.Name = "成绩总表(" & Sheets("基本信息设置").Range("d2").Value & ")"
  25.     Application.ScreenUpdating = False
  26.     r = 5
  27.     For i = 4 To Sheets("原始成绩").Range("a" & Rows.Count).End(xlUp).Row
  28.         If Sheets("原始成绩").Range("C" & i).Value = Left(Sheets("基本信息设置").Range("d2").Value, 1) Then
  29.              Range("A" & r).Value = Sheets("原始成绩").Range("B" & i).Value
  30.              Range("B" & r).Value = Sheets("原始成绩").Range("C" & i).Value
  31.              Range("C" & r).Value = Sheets("原始成绩").Range("D" & i).Value
  32.              Range("D" & r).Value = Sheets("原始成绩").Range("E" & i).Value
  33.              Range("E" & r).Value = Sheets("原始成绩").Range("F" & i).Value
  34.              Range("F" & r).Value = Sheets("原始成绩").Range("G" & i).Value
  35.              Range("J" & r).Value = Sheets("原始成绩").Range("H" & i).Value
  36.              Range("N" & r).Value = Sheets("原始成绩").Range("I" & i).Value
  37.              Range("A" & r).Value = Sheets("原始成绩").Range("B" & i).Value
  38.              Range("R" & r).Value = Sheets("原始成绩").Range("J" & i).Value
  39.              Range("V" & r).Value = Sheets("原始成绩").Range("K" & i).Value
  40.              Range("Z" & r).Value = Sheets("原始成绩").Range("L" & i).Value
  41.              Range("AD" & r).Value = Sheets("原始成绩").Range("M" & i).Value
  42.              Range("AH" & r).Value = Sheets("原始成绩").Range("N" & i).Value
  43.              Range("AL" & r).Value = Sheets("原始成绩").Range("O" & i).Value
  44.              r = r + 1
  45.         End If
  46.     Next
  47.    
  48.     arow = Range("a" & Rows.Count).End(xlUp).Row
  49.    
  50.     Range("A5:AO" & arow).Select
  51.    
  52.     With Selection.Borders(xlEdgeLeft)
  53.         .LineStyle = xlContinuous
  54.         .Weight = xlThin
  55.     End With
  56.     With Selection.Borders(xlEdgeTop)
  57.         .LineStyle = xlContinuous
  58.         .Weight = xlThin
  59.     End With
  60.     With Selection.Borders(xlEdgeBottom)
  61.         .LineStyle = xlContinuous
  62.         .Weight = xlThin
  63.     End With
  64.     With Selection.Borders(xlEdgeRight)
  65.         .LineStyle = xlContinuous
  66.         .Weight = xlThin
  67.     End With
  68.     With Selection.Borders(xlInsideVertical)
  69.         .LineStyle = xlContinuous
  70.         .Weight = xlThin
  71.     End With
  72.     With Selection.Borders(xlInsideHorizontal)
  73.         .LineStyle = xlContinuous
  74.         .Weight = xlThin
  75.     End With
  76.    
  77.     With Selection
  78.         .HorizontalAlignment = xlCenter
  79.         .VerticalAlignment = xlCenter
  80.     End With
  81.    
  82.         For i = 5 To arow
  83.             Range("G" & i).Value = Application.WorksheetFunction.Rank(Range("F" & i).Value, Range("F" & uprow(Range("C" & i)) & ":F" & downrow(Range("C" & i))), 0)          '班级排名
  84.             Range("K" & i).Value = Application.WorksheetFunction.Rank(Range("J" & i).Value, Range("J" & uprow(Range("C" & i)) & ":J" & downrow(Range("C" & i))), 0)
  85.             Range("O" & i).Value = Application.WorksheetFunction.Rank(Range("N" & i).Value, Range("N" & uprow(Range("C" & i)) & ":N" & downrow(Range("C" & i))), 0)
  86.             Range("S" & i).Value = Application.WorksheetFunction.Rank(Range("R" & i).Value, Range("R" & uprow(Range("C" & i)) & ":R" & downrow(Range("C" & i))), 0)
  87.             Range("AI" & i).Value = Application.WorksheetFunction.Rank(Range("AH" & i).Value, Range("AH" & uprow(Range("C" & i)) & ":AH" & downrow(Range("C" & i))), 0)
  88.             Range("AM" & i).Value = Application.WorksheetFunction.Rank(Range("AL" & i).Value, Range("AL" & uprow(Range("C" & i)) & ":AL" & downrow(Range("C" & i))), 0)
  89.             
  90.             Range("H" & i).Value = Application.WorksheetFunction.Rank(Range("F" & i).Value, Range("F" & uprow(Range("A" & i)) & ":F" & downrow(Range("A" & i))), 0)          '校级排名
  91.             Range("L" & i).Value = Application.WorksheetFunction.Rank(Range("J" & i).Value, Range("J" & uprow(Range("A" & i)) & ":J" & downrow(Range("A" & i))), 0)
  92.             Range("P" & i).Value = Application.WorksheetFunction.Rank(Range("N" & i).Value, Range("N" & uprow(Range("A" & i)) & ":N" & downrow(Range("A" & i))), 0)
  93.             Range("T" & i).Value = Application.WorksheetFunction.Rank(Range("R" & i).Value, Range("R" & uprow(Range("A" & i)) & ":R" & downrow(Range("A" & i))), 0)
  94.             Range("AJ" & i).Value = Application.WorksheetFunction.Rank(Range("AH" & i).Value, Range("AH" & uprow(Range("A" & i)) & ":AH" & downrow(Range("A" & i))), 0)
  95.             Range("AN" & i).Value = Application.WorksheetFunction.Rank(Range("AL" & i).Value, Range("AL" & uprow(Range("A" & i)) & ":AL" & downrow(Range("A" & i))), 0)
  96.             
  97.             Range("I" & i).Value = Application.WorksheetFunction.Rank(Range("F" & i).Value, Range("F5:F" & arow), 0)                                                          '总排名
  98.             Range("M" & i).Value = Application.WorksheetFunction.Rank(Range("J" & i).Value, Range("J5:J" & arow), 0)
  99.             Range("Q" & i).Value = Application.WorksheetFunction.Rank(Range("N" & i).Value, Range("N5:N" & arow), 0)
  100.             Range("U" & i).Value = Application.WorksheetFunction.Rank(Range("R" & i).Value, Range("R5:R" & arow), 0)
  101.             Range("AK" & i).Value = Application.WorksheetFunction.Rank(Range("AH" & i).Value, Range("AH5:AH" & arow), 0)
  102.             Range("AO" & i).Value = Application.WorksheetFunction.Rank(Range("AL" & i).Value, Range("AL5:AL" & arow), 0)
  103.         Next
  104.    
  105.    
  106.     If Sheets("基本信息设置").Range("d2").Value <> "一年级" And Sheets("基本信息设置").Range("d2").Value <> "二年级" Then
  107.         
  108.         For i = 5 To arow
  109.            
  110.             Range("W" & i).Value = Application.WorksheetFunction.Rank(Range("V" & i).Value, Range("V" & uprow(Range("C" & i)) & ":V" & downrow(Range("C" & i))), 0)
  111.             Range("AA" & i).Value = Application.WorksheetFunction.Rank(Range("Z" & i).Value, Range("Z" & uprow(Range("C" & i)) & ":Z" & downrow(Range("C" & i))), 0)
  112.             Range("AE" & i).Value = Application.WorksheetFunction.Rank(Range("AD" & i).Value, Range("AD" & uprow(Range("C" & i)) & ":AD" & downrow(Range("C" & i))), 0)
  113.            
  114.             Range("X" & i).Value = Application.WorksheetFunction.Rank(Range("V" & i).Value, Range("V" & uprow(Range("A" & i)) & ":V" & downrow(Range("A" & i))), 0)
  115.             Range("AB" & i).Value = Application.WorksheetFunction.Rank(Range("Z" & i).Value, Range("Z" & uprow(Range("A" & i)) & ":Z" & downrow(Range("A" & i))), 0)
  116.             Range("AF" & i).Value = Application.WorksheetFunction.Rank(Range("AD" & i).Value, Range("AD" & uprow(Range("A" & i)) & ":AD" & downrow(Range("A" & i))), 0)
  117.          
  118.             Range("Y" & i).Value = Application.WorksheetFunction.Rank(Range("V" & i).Value, Range("V5:V" & arow), 0)
  119.             Range("AC" & i).Value = Application.WorksheetFunction.Rank(Range("Z" & i).Value, Range("Z5:Z" & arow), 0)
  120.             Range("AG" & i).Value = Application.WorksheetFunction.Rank(Range("AD" & i).Value, Range("AD5:AD" & arow), 0)
  121.         
  122.         Next
  123.     Else
  124.         Columns("V:AG").Delete
  125.         
  126.     End If
  127.     Application.ScreenUpdating = True
  128.     Range("A5").Select
  129. End Sub

  130. Function uprow(ByVal aaa As Range)
  131.     Dim h, l, i&
  132.     h = aaa.Row
  133.     l = aaa.Column
  134.     For i = aaa.Row To 1 Step -1
  135.         If aaa.Value <> Cells(i, l).Value Then Exit For
  136.     Next
  137.     uprow = i + 1
  138. End Function

  139. Function downrow(ByVal aaa As Range)
  140.     Dim h, l, i&
  141.     h = aaa.Row
  142.     l = aaa.Column
  143.     For i = aaa.Row To Rows.Count
  144.         If aaa.Value <> Cells(i, l).Value Then Exit For
  145.     Next
  146.     downrow = i - 1
  147. End Function

  148. Sub 清除格式()
  149. Dim s As Style
  150. Application.ScreenUpdating = False
  151. On Error Resume Next
  152. For Each s In ThisWorkbook.Styles
  153.     If Not s.BuiltIn Then s.Delete
  154. Next
  155. Application.ScreenUpdating = True
  156. End Sub

复制代码
我也是新手,刚刚学习VBA,可能写得比较啰嗦,你看看可不可以用

XX中心考试各学校成绩表123.zip

62.03 KB, 下载次数: 38

TA的精华主题

TA的得分主题

发表于 2019-4-20 07:05 来自手机 | 显示全部楼层
wuchengde 发表于 2019-4-19 20:10
Sheets.Add
ActiveSheet.Name = s
Sheets(s).Activate

这个代码不全啊!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-20 08:58 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
longkkkk 发表于 2019-4-20 01:55
我也是新手,刚刚学习VBA,可能写得比较啰嗦,你看看可不可以用

非常感谢你大半夜能帮忙解决问题,由于今天外出,晚上再测试一下是否能达到目的

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-20 09:00 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
乐乐2006201505 发表于 2019-4-20 07:05
这个代码不全啊!

由于不是同一个问题,所以去除了上面部分的定义。但主要代码还是在的,主要是班排和年排子程序……

TA的精华主题

TA的得分主题

发表于 2019-4-20 13:40 | 显示全部楼层
班排和年排子程序可参见
通用排名次自定义函数
http://club.excelhome.net/thread-1454513-1-1.html
(出处: ExcelHome技术论坛)

TA的精华主题

TA的得分主题

发表于 2019-4-20 21:40 | 显示全部楼层
wuchengde 发表于 2019-4-19 18:11
补传附件,希望各位高手帮忙解决,非常感谢!

XX中心考试各学校成绩表(2).rar (47.93 KB, 下载次数: 28)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-19 16:13 , Processed in 0.035550 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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