ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求一段VBA,将与朱倩同学各科成绩差符合要求的学生找出并填入结果显示区内

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-7 14:42 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 zhengsong347 于 2023-5-8 14:33 编辑

用VBA:将与朱倩同学各科成绩差符合要求的学生找出并填入结果显示区内

分班后手动调整.rar

50.06 KB, 下载次数: 7

查找所有符合要求的学生,并且填入结果显示区内

TA的精华主题

TA的得分主题

发表于 2023-5-7 16:05 | 显示全部楼层
楼主设定的条件:是各科及总分的相差是全部符合?还是单个符合?结果不一样的呀!

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-7 17:30 | 显示全部楼层
本帖最后由 zhengsong347 于 2023-5-7 18:03 编辑
鄂龙蒙 发表于 2023-5-7 16:05
楼主设定的条件:是各科及总分的相差是全部符合?还是单个符合?结果不一样的呀!

要求各科全部符合,,,,至少总分符合

TA的精华主题

TA的得分主题

发表于 2023-5-9 15:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub test()
  2.     Dim r%, i%
  3.     Dim arr, brr
  4.     With Worksheets("初一分班原始成绩")
  5.         tj = .Range("f2:o4")
  6.         r = .Cells(.Rows.Count, 1).End(xlUp).Row
  7.         arr = .Range("a7:j" & r)
  8.         ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
  9.         m = 0
  10.         For i = 1 To UBound(arr)
  11.             If arr(i, 4) <> tj(1, 4) Then
  12.                 For j = 6 To UBound(arr, 2)
  13.                     If Abs(arr(i, j) - tj(1, j)) > tj(3, j) Then
  14.                         Exit For
  15.                     End If
  16.                 Next
  17.                 If j > UBound(arr, 2) Then
  18.                     m = m + 1
  19.                     For j = 1 To UBound(arr, 2)
  20.                         brr(m, j) = arr(i, j)
  21.                     Next
  22.                 End If
  23.             End If
  24.         Next
  25.         If m = 0 Then
  26.             MsgBox "没有符合条件数据!"
  27.             Exit Sub
  28.         End If
  29.         .Range("r4:aa" & .Rows.Count).ClearContents
  30.         .Range("r4").Resize(m, UBound(brr, 2)) = brr
  31.         MsgBox "共查到" & m & "条符合条件数据!"
  32.     End With
  33.         
  34. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-5-9 15:35 | 显示全部楼层
详见附件。

分班后手动调整.rar

60.9 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2023-5-17 14:50 | 显示全部楼层
不是太明白楼主的需求,按照给定的条件,好象没有符合条件的记录,于是我就在下面模拟了几条记录,不知是不是能达成楼主的目的。

  1. Sub Query()
  2.     Dim arrDetail()
  3.     Dim arrA(), arrB(), arrC()
  4.     Dim iRow As Integer
  5.     Dim iName As String
  6.     Dim CompareType As String '1=正差,2=负差,3=正负差,4=总差
  7.     Dim strPrompt As String
  8.     strPrompt = "1=正差,2=负差,3=正负差,4=总差"
  9.     CompareType = InputBox(strPrompt, "请输入查询类型", 4)
  10.     If CompareType = "" Then Exit Sub
  11.     If InStr("/1/2/3/4/", CompareType) = 0 Then
  12.         MsgBox ("输入错误!")
  13.         Exit Sub
  14.     End If
  15.     m = 0
  16.     Sheet1.Activate
  17.     With ActiveSheet
  18.         iRow = .UsedRange.Rows.Count
  19.         .Range("R4:AA" & iRow).ClearContents
  20.         iName = .Range("I2")
  21.         arrDetail = .Range("A7:J" & iRow).Value
  22.         arrA = .Range("K2:O2").Value
  23.         arrB = .Range("K4:O4").Value
  24.         Select Case CompareType
  25.         Case Is = "1"
  26.             For i = 1 To UBound(arrDetail, 1)
  27.                 For j = 1 To 4
  28.                     If Round(arrA(1, j) - arrDetail(i, j + 5), 2) <> Round(arrB(1, j), 2) Then
  29.                         Exit For
  30.                     End If
  31.                     If j = 4 Then
  32.                         For p = 1 To 10
  33.                             .Cells(4 + m, 17 + p) = arrDetail(i, p)
  34.                         Next
  35.                         m = m + 1
  36.                     End If
  37.                 Next
  38.             Next
  39.         Case Is = "2"
  40.             For i = 1 To UBound(arrDetail, 1)
  41.                 For j = 1 To 4
  42.                     If Round(arrDetail(i, j + 5) - arrA(1, j), 2) <> Round(arrB(1, j), 2) Then
  43.                         Exit For
  44.                     End If
  45.                     If j = 4 Then
  46.                         For p = 1 To 10
  47.                             .Cells(4 + m, 17 + p) = arrDetail(i, p)
  48.                         Next
  49.                         m = m + 1
  50.                     End If
  51.                 Next
  52.             Next
  53.         Case Is = "3"
  54.             For i = 1 To UBound(arrDetail, 1)
  55.                 For j = 1 To 4
  56.                     If Abs(Round(arrA(1, j) - arrDetail(i, j + 5), 2)) <> Round(arrB(1, j), 2) Then
  57.                         Exit For
  58.                     End If
  59.                     If j = 4 Then
  60.                         For p = 1 To 10
  61.                             .Cells(4 + m, 17 + p) = arrDetail(i, p)
  62.                         Next
  63.                         m = m + 1
  64.                     End If
  65.                 Next
  66.             Next
  67.         Case Is = "4"
  68.             For i = 1 To UBound(arrDetail, 1)
  69.                 If Round(Abs(arrA(1, 5) - arrDetail(i, 10)), 2) = Round(arrB(1, 5), 2) Then
  70.                     For p = 1 To 10
  71.                         .Cells(4 + m, 17 + p) = arrDetail(i, p)
  72.                     Next
  73.                     m = m + 1
  74.                 End If
  75.             Next
  76.         End Select
  77.     End With
  78. End Sub
复制代码

无标题.png

分班后手动调整.rar

68.16 KB, 下载次数: 4

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-14 14:42 , Processed in 0.041787 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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