ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 关于中考录取的VBA,请老师帮忙。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-6-14 16:28 | 显示全部楼层
Excel 平行志愿录取程序请大侠帮助修改谢谢!!-ExcelVBA程序开发-ExcelHome技术论坛 -  http://club.excelhome.net/thread-1281838-1-1.html

TA的精华主题

TA的得分主题

发表于 2019-6-14 19:42 | 显示全部楼层
microyip 发表于 2019-6-14 10:21
我也来凑凑热闹,附上附件以供参考

这道题还是有点意思啊。难怪 microyip老师也出手了。

好像 您 和 鄂龙蒙 老师的运行结果都是有点问题哎。

11.jpg

鄂龙蒙 老师的结果,标色的应该是符合录取条件的。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-6-14 19:48 | 显示全部楼层
microyip 发表于 2019-6-14 10:21
我也来凑凑热闹,附上附件以供参考

如图,我和microyip老师做出的结果也很多不一致。
哎,就留给楼主去核对了。

d1.gif

TA的精华主题

TA的得分主题

发表于 2019-6-14 19:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-6-14 20:07 | 显示全部楼层
如图:
假如录取到最后一个计划数,但此时 投档分 五科总分 四科总分都相同的场景下,全部会录取。否则按高到低录取满计划数结束。

d1.gif

TA的精华主题

TA的得分主题

发表于 2019-6-14 20:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

TA的精华主题

TA的得分主题

发表于 2019-6-14 22:46 | 显示全部楼层
不知道为什么 发表于 2019-6-14 19:42
这道题还是有点意思啊。难怪 microyip老师也出手了。

好像 您 和 鄂龙蒙 老师的运行结果 ...

怎么就不符合呢?               
               志愿1         等级分        定向生        投档分
录取条件        8301         <=9                是             >=460
雷建卿      8301         5              是                524.2

TA的精华主题

TA的得分主题

发表于 2019-6-14 23:23 | 显示全部楼层
microyip 发表于 2019-6-14 22:46
怎么就不符合呢?               
               志愿1         等级分        定向生        投档分
录取条件        8301         =460

这个是 上面那个老师的结果,我觉得不准确的。呵呵

TA的精华主题

TA的得分主题

发表于 2019-6-15 10:00 | 显示全部楼层
本帖最后由 鄂龙蒙 于 2019-6-15 10:18 编辑
不知道为什么 发表于 2019-6-14 19:42
这道题还是有点意思啊。难怪 microyip老师也出手了。

好像 您 和 鄂龙蒙 老师的运行结果 ...
  1. Sub 录取()
  2.     Range("A2:A10000") = ""
  3.     Dim arr, ar(), br, brr(), cr(), sa, sb
  4.     Dim m, n, i, j, x, y, p, a, b, c, r, s, k, t, temp
  5.     Dim d As Object
  6.     Set d = CreateObject("scripting.dictionary")
  7.     sa = Array(2, 3, 4, 9, 18, 19)
  8.     sb = Array(1, 2, 4, 5, 6)
  9.     arr = Range("A1").CurrentRegion
  10.     For i = 2 To UBound(arr)
  11.         If VBA.IsNumeric(arr(i, 10)) Then
  12.             If arr(i, 11) = "8301" And Val(arr(i, 10)) <= 9 And arr(i, 6) = "是" And arr(i, 9) >= 460 Then
  13.                 m = m + 1
  14.                 ReDim Preserve brr(1 To 6, 1 To m)
  15.                 For j = 0 To 5
  16.                     brr(j + 1, m) = arr(i, sa(j))
  17.                 Next
  18.             End If
  19.         End If
  20.     Next
  21.     For i = 1 To UBound(brr, 2)
  22.          If Not d.exists(brr(3, i)) Then
  23.             m = 1
  24.             ReDim br(1 To 5, 1 To m)
  25.         Else
  26.             br = d(brr(3, i))
  27.             m = UBound(br, 2) + 1
  28.             ReDim Preserve br(1 To 5, 1 To m)
  29.         End If
  30.         For j = 0 To 4
  31.             br(j + 1, m) = brr(sb(j), i)
  32.         Next
  33.         d(brr(3, i)) = br
  34.     Next
  35.     k = d.keys
  36.     t = d.items
  37.     m = 0
  38.     arr = Sheet2.Range("L1").CurrentRegion
  39.     For x = 0 To d.Count - 1
  40.         For i = 1 To UBound(t(x), 2) - 1
  41.             p = i
  42.             For j = i + 1 To UBound(t(x), 2)
  43.                 If Val(t(x)(3, p)) < Val(t(x)(3, j)) Then p = j
  44.             Next
  45.             If p <> i Then
  46.                 For j = 1 To 5
  47.                     temp = t(x)(j, i)
  48.                     t(x)(j, i) = t(x)(j, p)
  49.                     t(x)(j, p) = temp
  50.                 Next
  51.             End If
  52.         Next
  53.     Next
  54.     For x = 0 To d.Count - 1
  55.         For i = 2 To UBound(arr)
  56.             If CStr(arr(i, 1)) = k(x) Then
  57.                 If Val(arr(i, 2)) <= UBound(t(x), 2) Then
  58.                     If t(x)(4, Val(arr(i, 2))) = t(x)(4, Val(arr(i, 2)) + 1) Then
  59.                         n = 0: a = 0: b = 0: c = 0: r = 0
  60.                         For j = Val(arr(i, 2)) To 1 Step -1
  61.                             If t(x)(4, j) = t(x)(4, j - 1) Then n = n + 1 Else: a = j: Exit For
  62.                         Next
  63.                         For j = Val(arr(i, 2)) To UBound(t(x), 2)
  64.                             If t(x)(4, j) = t(x)(4, j + 1) Then n = n + 1 Else: b = j: Exit For
  65.                         Next
  66.                         If n > 0 Then
  67.                             ReDim cr(1 To n + 1, 1 To 5)
  68.                             r = 0
  69.                             For j = a To b
  70.                                 r = r + 1
  71.                                 For y = 1 To 5
  72.                                     cr(r, y) = t(x)(y, j)
  73.                                 Next
  74.                             Next
  75.                             For y = 1 To UBound(cr) - 1
  76.                                 p = y
  77.                                 For j = y + 1 To UBound(cr)
  78.                                     If cr(p, 5) < cr(j, 5) Then p = j
  79.                                 Next
  80.                                 If p <> y Then
  81.                                     For j = 1 To 5
  82.                                         temp = cr(y, j)
  83.                                         cr(y, j) = cr(p, j)
  84.                                         cr(p, j) = temp
  85.                                     Next
  86.                                 End If
  87.                             Next
  88.                             For j = 1 To a - 1
  89.                                 m = m + 1
  90.                                 ReDim Preserve ar(1 To 5, 1 To m)
  91.                                 For y = 1 To 5
  92.                                     ar(y, m) = t(x)(y, j)
  93.                                 Next
  94.                             Next
  95.                             c = Val(arr(i, 2)) - a + 1
  96.                             For j = 1 To c
  97.                                 m = m + 1
  98.                                 ReDim Preserve ar(1 To 5, 1 To m)
  99.                                 For y = 1 To 5
  100.                                     ar(y, m) = cr(j, y)
  101.                                 Next
  102.                             Next
  103.                         End If
  104.                     Else
  105.                         For j = 1 To Val(arr(i, 2))
  106.                             m = m + 1
  107.                             ReDim Preserve ar(1 To 5, 1 To m)
  108.                             For y = 1 To 5
  109.                                 ar(y, m) = t(x)(y, j)
  110.                             Next
  111.                         Next
  112.                     End If
  113.                 Else
  114.                     For j = 1 To UBound(t(x), 2)
  115.                         m = m + 1
  116.                         ReDim Preserve ar(1 To 5, 1 To m)
  117.                         For y = 1 To 5
  118.                             ar(y, m) = t(x)(y, j)
  119.                         Next
  120.                     Next
  121.                 End If
  122.             End If
  123.         Next
  124.     Next
  125.     arr = Range("A1").CurrentRegion
  126.     s = 0
  127.     For i = 2 To UBound(arr)
  128.         For x = 1 To UBound(ar, 2)
  129.             If CStr(arr(i, 2)) = CStr(ar(1, x)) Then Cells(i, 1) = "OK": s = s + 1
  130.         Next
  131.     Next
  132.     MsgBox "共有  " & s & "  名同学录取完毕!"
  133.     Set d = Nothing
  134. End Sub
  135. 谢谢您认真核对,是有点差错,已修改。
复制代码

TA的精华主题

TA的得分主题

发表于 2019-6-15 10:04 | 显示全部楼层
本帖最后由 鄂龙蒙 于 2019-6-15 10:24 编辑

附件
录取VBA求教-2019-6-15已修改.rar (627.7 KB, 下载次数: 25)

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-4-27 07:05 , Processed in 0.045818 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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