ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 在线等各位大神帮我一下 关于数据筛选

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-6-23 22:46 | 显示全部楼层
除了2012-2013(一)2012级补考后成绩.xls,其他都搞定了
草图.png

TA的精华主题

TA的得分主题

发表于 2017-6-23 23:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 mzbao 于 2017-6-23 23:21 编辑

闲来无事,做了个,你看看是不是你要的。

Untitled.jpg

工作簿1.rar

1.32 MB, 下载次数: 12

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-24 10:00 | 显示全部楼层
本帖最后由 ps90025505 于 2017-6-24 20:14 编辑
mzbao 发表于 2017-6-23 23:07
闲来无事,做了个,你看看是不是你要的。

太牛x了,,大概就这个样子,就行了,,,能教我怎么操作吗?我就这样的方式交给领导算了。。。这是超过3门的,再教我一下,超过多少门,的数字 在哪里修改,就行了。。超过3门太多了,,估计领导还需要知道超过4门 5 门之类的。
我刚才试着做了一下,前面学期及格后面不及格的,会出现在下面,,这样的话,我a列是不是排序一下,就是一个班的,到一起了。。不会乱吧。。

我用分列的方法去排序了。这样,学号3会排在13号后面,,如果能在单个数据3搞成03就更完美了,

如果要修改科目增加到5门是修改这个数值吗。。

发现有些学生,比如第一学期及格了,第二学期及格,第三学期,第四学期不及格的,,在data里面有,,但是抓取不到第一张汇总sheet表中。。

科目数量.jpg
排序.jpg
561陈盼盼.jpg
671陈盼盼.jpg
陈盼盼刷完图.jpg

TA的精华主题

TA的得分主题

发表于 2017-6-24 12:47 | 显示全部楼层
qingc0221 发表于 2017-6-23 22:46
除了2012-2013(一)2012级补考后成绩.xls,其他都搞定了

太牛X,上个附件学习下呗~

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-24 13:11 | 显示全部楼层
我太喜欢这个论坛了,我们单位处在一个60年代的纯手工工作模式,搞系统又不搞,还天天学别人的这个花样,那个花样,我了个去。。。整天就是折腾人玩。。

TA的精华主题

TA的得分主题

发表于 2017-6-24 15:08 | 显示全部楼层
尝试上传附件就退出登录,正常回复就没有问题..........

TA的精华主题

TA的得分主题

发表于 2017-6-24 15:40 | 显示全部楼层
  1. Option Explicit

  2. Dim i As Integer, j As Integer, k As Integer
  3. Dim Score As Variant    '成绩
  4. Dim n As Integer, p As Integer, Cnt As Integer
  5. Dim LastRec As Long, LastCol As Long
  6. Dim Term As String, Grade As String, Cls As String  '学期、年级、班级
  7. Dim Path As String, FileName As String
  8. Dim Wb As Workbook, Sht As Worksheet, Rng As Range, ttRows As Range
  9. Dim Arr, Result()

  10. Sub 提取数据()
  11. Rem   提取各年级各班级中不及格科目>=3的学生信息,按年级分类存放
  12. Rem   每次运行提取一个年级的数据,剔除及格的成绩
  13. Rem   因工作簿"2012-2013(一)2012级补考后成绩.xls"中工作表名称非数字,代码自动忽略

  14.     With Application.FileDialog(msoFileDialogFolderPicker) '选择年级文件夹
  15.         .Title = "选择年级文件夹"
  16.         .Show
  17.         If .SelectedItems.Count = 0 Then
  18.             Exit Sub
  19.         Else
  20.             Path = .SelectedItems(1) & ""
  21.         End If
  22.     End With
  23.     Application.ScreenUpdating = False
  24.     Grade = Right(Path, 8)
  25.     Grade = Left(Grade, 5)  '在文件名中获取年级
  26.     On Error Resume Next
  27.     If ThisWorkbook.Sheets(Grade) Is Nothing Then   '该年级工作表不存在则创建新表
  28.         ThisWorkbook.Sheets.Add '新增年级工作表
  29.         ThisWorkbook.ActiveSheet.Name = Grade
  30.     Else    '该年级工作表存在则退出
  31.         MsgBox "该年级工作表已存在!" & vbCrLf & "如需继续,请先删除该工作表" & vbCrLf & "或重命名以防止表名冲突"
  32.         Exit Sub
  33.     End If
  34.     On Error GoTo 0
  35.     ReDim Result(1 To 10000, 1 To 25)
  36.     FileName = Dir(Path & "*.xls*")
  37.     n = 0: Cnt = 0
  38.     Do While Len(FileName) <> 0
  39.         If Left(FileName, 1) <> "." Then
  40.             p = InStr(FileName, ")")
  41.             Term = Left(FileName, p)
  42.             Set Wb = Workbooks.Open(Path & FileName)
  43.             For Each Sht In Wb.Worksheets
  44.                 If IsNumeric(Sht.Name) Then '表名为班号,都是数字
  45.                     Cls = Sht.Name
  46.                     Arr = Sht.Range("A2").CurrentRegion
  47.                     LastRec = UBound(Arr, 1) - 1    '最后一条记录行号,除去汇总行
  48.                     LastCol = UBound(Arr, 2)        '最大列号
  49.                     Rem ---------添加班级标题行开始------------
  50.                     Rem 只要是新的班级就添加标题行,不管该班级有没有符合条件的数据
  51.                     Rem 所以会出现多余的标题行,需后续处理
  52.                     n = n + 2
  53.                     Result(n, 1) = "学期"
  54.                     Result(n, 2) = "班级"
  55.                     Result(n, 3) = "学号"
  56.                     Result(n, 4) = "姓名"
  57.                     For k = 3 To LastCol
  58.                         Result(n, k + 2) = Arr(3, k)
  59.                     Next k
  60.                     Rem ---------添加班级标题行结束------------
  61.                     For i = 5 To LastRec
  62.                         Cnt = 0
  63.                         For j = 3 To LastCol
  64.                             Score = Arr(i, j)
  65.                             If IsNumeric(Score) Then    '成绩为数字的情形
  66.                                 If Score >= 60 Then
  67.                                     Arr(i, j) = ""  '把及格的分数替换为""
  68.                                 Else
  69.                                     Cnt = Cnt + 1
  70.                                 End If
  71.                             Else                    '成绩为非数字类型
  72.                                 If Trim(Score) = "及格" Then '用Trim防止文字中含有空格
  73.                                     Arr(i, j) = ""  '把"及格"替换为""
  74.                                 Else
  75.                                     Cnt = Cnt + 1
  76.                                 End If
  77.                             End If
  78.                         Next j
  79.                         If Cnt >= 3 Then    '如果某同学有3科以上不及格则输出结果
  80.                             n = n + 1
  81.                             Result(n, 1) = Term '学期
  82.                             Result(n, 2) = Cls  '班级
  83.                             Result(n, 3) = Cls & Format(Arr(i, 1), "00")    '学号=班级+序号
  84.                             Result(n, 4) = Arr(i, 2)    '姓名
  85.                             For k = 3 To LastCol    '各科成绩
  86.                                 Result(n, k + 2) = Arr(i, k)
  87.                             Next k
  88.                         End If
  89.                     Next i
  90.                 End If
  91.             Next Sht
  92.             Wb.Close 1
  93.         End If
  94.         FileName = Dir
  95.     Loop
  96.     Set Wb = Nothing
  97.     Set Sht = Nothing
  98.     Set Rng = Rows(1)   '多余的标题行,即某班没有符合的数据
  99.     Set ttRows = Rows(2) '正常标题行,用于字体加粗和填充颜色
  100.     For i = 1 To n
  101.         If Result(i, 1) = "学期" Then
  102.             If Result(i + 1, 1) = "" Then
  103.                 Set Rng = Union(Rng, Rows(i), Rows(i + 1))
  104.             Else
  105.                 Set ttRows = Union(ttRows, Rows(i))
  106.             End If
  107.         End If
  108.     Next i
  109.     Rem 输出结果
  110.     ThisWorkbook.Sheets(Grade).Range("A1").Resize(n, 25) = Result
  111.     Rem 标题行字体加粗并填充颜色
  112.     ttRows.Font.Bold = True
  113.     Intersect(ttRows, ThisWorkbook.Sheets(Grade).UsedRange).Interior.ColorIndex = 42
  114.     Rem 删除多余行
  115.     Rng.Delete
  116.     Application.ScreenUpdating = True
  117. End Sub

  118. Sub 提取单张工作簿()
  119. Rem 运行上面的代码得到"2012级"工作表后再运行此代码
  120. Rem "2012-2013(一)2012级补考后成绩.xls"中有7条"第二学期"的数据,已先行挪到新工作表,后续手工添加即可
  121. Rem 功能:将"2012-2013(一)2012级补考后成绩.xls"中的满足条件的数据提取到工作表"2012级"的顶部
  122.     Dim LastRow As Long, m As Long
  123.     Dim d As Object
  124.     Set d = CreateObject("scripting.dictionary")
  125.     Path = ThisWorkbook.Path & ""
  126.     FileName = Path & "2012级成绩\2012-2013(一)2012级补考后成绩.xls"
  127.    
  128.     Application.ScreenUpdating = False
  129.     Set Wb = Workbooks.Open(FileName)
  130.     Set Sht = Wb.Sheets("2012级成绩")
  131.     LastRow = Sht.Cells(Sht.Rows.Count, 1).End(xlUp).Row
  132.     Arr = Sht.Range("A1:L" & LastRow + 1)
  133.     Wb.Close 1
  134.     Set Wb = Nothing
  135.     Set Sht = Nothing
  136.     ReDim Result(1 To UBound(Arr), 1 To 25)
  137.     Term = "2012-2013(一)"
  138.     n = 0: Cnt = 0
  139.     For i = 2 To LastRow - 1
  140.         If Arr(i, 1) <> Arr(i - 1, 1) Then  '跳转到另一个班级
  141.             Rem ---------添加班级标题行开始------------
  142.             n = n + 2
  143.             Result(n, 1) = "学期"
  144.             Result(n, 2) = "班级"
  145.             Result(n, 3) = "学号"
  146.             Result(n, 4) = "姓名"
  147.             d.RemoveAll
  148.             m = 0
  149.             Do While Arr(i + m, 2) = Arr(i, 2)
  150.                 Result(n, 5 + m) = Arr(i + m, 12)
  151.                 d(Arr(i + m, 12)) = m
  152.                 m = m + 1
  153.             Loop
  154.             Rem ---------添加班级标题行结束------------
  155.         End If
  156.         If Arr(i, 2) <> Arr(i - 1, 2) Then  '另一位学生
  157.             n = n + 1                       '换行,并添加学生信息
  158.             Result(n, 1) = Term             '学期
  159.             Result(n, 2) = Arr(i, 1)        '班级
  160.             Result(n, 3) = Arr(i, 2)        '学号
  161.             Result(n, 4) = Arr(i, 3)        '姓名
  162.         End If

  163.         m = d(Arr(i, 12)) + 5               '科目对应的列号
  164.         If Arr(i, 7) >= 60 Then
  165.             Result(n, m) = ""
  166.         Else
  167.             Cnt = Cnt + 1
  168.             If Arr(i, 8) = "" Then
  169.                 Result(n, m) = Arr(i, 7)
  170.             Else
  171.                 Result(n, m) = Arr(i, 8)
  172.             End If
  173.         End If
  174.         If Arr(i, 2) <> Arr(i + 1, 2) Then  '已到该学生最后一条数据
  175.             If Cnt < 3 Then                '如果该学生不及格科目<3,则删除改行记录
  176.                 For k = 1 To 25
  177.                     Result(n, k) = ""
  178.                 Next k
  179.                 n = n - 1
  180.             End If
  181.             Cnt = 0                         '不及格计数归零
  182.         End If
  183.     Next i
  184.     Range(Rows(1), Rows(n + 1)).Insert
  185.     Range("A1").Resize(n, 25) = Result
  186.     Set Rng = Rows(1)
  187.     Set ttRows = Rows(2)
  188.     For i = 1 To n  '删除多余的标题
  189.         If Result(i, 1) = "学期" Then
  190.             If Result(i + 1, 1) = "" Then
  191.                 Set Rng = Union(Rng, Rows(i), Rows(i + 1))
  192.             Else
  193.                 Set ttRows = Union(ttRows, Rows(i))
  194.             End If
  195.         End If
  196.     Next i
  197.     ttRows.Font.Bold = True
  198.     Intersect(ttRows, Range("A:N")).Interior.ColorIndex = 42
  199.     Rng.Delete
  200.     Application.ScreenUpdating = True
  201. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2017-6-24 15:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
上代码没问题,审核中
上传附件就退出登录

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-24 19:36 | 显示全部楼层
本帖最后由 ps90025505 于 2017-6-24 19:41 编辑
qingc0221 发表于 2017-6-24 15:43
上代码没问题,审核中
上传附件就退出登录

我的qq 504917770  你qq多少,加我一下。我添加代码运行,出现错误。。不知道怎么搞了。

TA的精华主题

TA的得分主题

发表于 2017-6-24 21:09 | 显示全部楼层
成绩.7z (1.08 MB, 下载次数: 11)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-19 08:46 , Processed in 0.063288 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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