ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 新高考下,求助考场编排。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-13 22:18 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
有点好奇,这么重要的问题,国家教育部门没有开发对应的程序吗

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-14 05:49 | 显示全部楼层
这是平时学校月考用的。高考监考安排肯定有啊。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-14 07:56 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-15 06:52 | 显示全部楼层
本帖最后由 戎马书生222 于 2024-4-15 06:56 编辑

你好,点了排考场后,怎么把右边的N列到V列也给清除了内容。要实现右边区域的功能,该如何实现?

谢谢了!!!
微信图片_20240415064712.png

工作簿1.rar

91.25 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2024-4-15 08:57 | 显示全部楼层
  1. Sub vba排考场()
  2.     Dim r%, i%
  3.     Dim arr, brr
  4.     Dim d(0 To 2) As Object
  5.     Dim vs As Variant
  6.     Dim d1 As Object
  7.     Set d1 = CreateObject("scripting.dictionary")
  8.     Set d2 = CreateObject("scripting.dictionary")
  9.     Dim kaochangrenshu As Integer  '定义了一个标准考场的人数
  10.     Application.ScreenUpdating = False
  11.     Application.DisplayAlerts = False
  12.     vs = Array(Array("英", "日", "西"), Array("物化", "政史"), Array("生", "地"))
  13.     For k = 0 To 2
  14.         Set d(k) = CreateObject("scripting.dictionary")
  15.     Next
  16.     kaochangrenshu = Application.InputBox(prompt:="请输入一个标准考场的人数", Title:="输入标准人数", Default:=45, Type:=1)
  17.     With Worksheets("vba排考场")
  18.         .AutoFilterMode = False
  19.         r = .Cells(.Rows.Count, 1).End(xlUp).Row
  20.         c = .Cells(1, .Columns.Count).End(xlToLeft).Column
  21.         .Range("f2:s" & r).ClearContents
  22.         .Range("t3:v" & r).ClearContents
  23.         .Range("u3:u" & .Rows.Count).NumberFormatLocal = "@"
  24.         arr = .Range("a2:m" & r)
  25.         m = 0
  26.         For k = 1 To UBound(arr) Step kaochangrenshu
  27.             If UBound(arr) - k + 1 > 8 Then
  28.                 m = m + 1
  29.             End If
  30.             For q = 1 To Application.Min(UBound(arr) - k + 1, kaochangrenshu)
  31.                 x = k + q - 1
  32.                 arr(x, 6) = m
  33.                 If UBound(arr) - k + 1 > 8 Then
  34.                     arr(x, 7) = q
  35.                 Else
  36.                     arr(x, 7) = kaochangrenshu + q
  37.                 End If
  38.                 If Not d1.exists(m) Then
  39.                     ReDim brr(1 To 5)
  40.                     brr(1) = m
  41.                 Else
  42.                     brr = d1(m)
  43.                 End If
  44.                 brr(2) = brr(2) + 1
  45.                 d1(m) = brr
  46.                 If Not d2.exists("语数") Then
  47.                     ReDim crr(1 To 3)
  48.                     crr(1) = "语数"
  49.                     crr(2) = Array(0, 0)
  50.                 Else
  51.                     crr = d2("语数")
  52.                 End If
  53.                 If crr(2)(0) = 0 Then
  54.                     crr(2)(0) = m
  55.                 End If
  56.                 crr(2)(1) = m
  57.                 crr(3) = arr(x, 7)
  58.                 d2("语数") = crr
  59.                
  60.                     
  61.             Next
  62.         Next
  63.                         
  64.         For i = 1 To UBound(arr)
  65.             If Not d(0).exists(arr(i, 4)) Then
  66.                 Set d(0)(arr(i, 4)) = CreateObject("scripting.dictionary")
  67.             End If
  68.             d(0)(arr(i, 4))(i) = Empty
  69.             km = Left(arr(i, 3), 2)
  70.             If Not d(1).exists(km) Then
  71.                 Set d(1)(km) = CreateObject("scripting.dictionary")
  72.             End If
  73.             d(1)(km)(i) = Empty
  74.             km = Right(arr(i, 3), 1)
  75.             If Not d(2).exists(km) Then
  76.                 Set d(2)(km) = CreateObject("scripting.dictionary")
  77.             End If
  78.             d(2)(km)(i) = Empty
  79.         Next
  80.         y = 6
  81.         For w = 0 To UBound(vs)
  82.             y = y + 2
  83.             m = 0
  84.             For u = 0 To UBound(vs(w))
  85.                 aa = vs(w)(u)
  86.                 If d(w).exists(aa) Then
  87.                     kk = d(w)(aa).keys
  88.                     For k = 0 To UBound(kk) Step kaochangrenshu
  89.                         If UBound(kk) - k + 1 > 8 Then
  90.                             m = m + 1
  91.                         End If
  92.                         For q = 1 To Application.Min(UBound(kk) - k + 1, kaochangrenshu)
  93.                             x = kk(k + q - 1)
  94.                             arr(x, y) = m
  95.                             If UBound(kk) - k + 1 > 8 Then
  96.                                 arr(x, y + 1) = q
  97.                             Else
  98.                                 arr(x, y + 1) = kaochangrenshu + q
  99.                             End If
  100.                             If Not d1.exists(m) Then
  101.                                 ReDim brr(1 To 5)
  102.                                 brr(1) = m
  103.                             Else
  104.                                 brr = d1(m)
  105.                             End If
  106.                             brr(w + 3) = brr(w + 3) + 1
  107.                             d1(m) = brr
  108.                            
  109.                             xm = vs(w)(u)
  110.                             If Not d2.exists(xm) Then
  111.                                 ReDim crr(1 To 3)
  112.                                 crr(1) = xm
  113.                                 crr(2) = Array(0, 0)
  114.                             Else
  115.                                 crr = d2(xm)
  116.                             End If
  117.                             If crr(2)(0) = 0 Then
  118.                                 crr(2)(0) = m
  119.                             End If
  120.                             crr(2)(1) = m
  121.                             crr(3) = arr(x, y + 1)
  122.                             d2(xm) = crr
  123.                         Next
  124.                     Next
  125.                 End If
  126.             Next
  127.         Next
  128.         ReDim drr(1 To d2.Count, 1 To 3)
  129.         m = 0
  130.         For Each aa In d2.keys
  131.             crr = d2(aa)
  132.             crr(2) = crr(2)(0) & "-" & crr(2)(1)
  133.             m = m + 1
  134.             For j = 1 To UBound(crr)
  135.                 drr(m, j) = crr(j)
  136.             Next
  137.         Next
  138.             
  139.         .Range("a2").Resize(UBound(arr), UBound(arr, 2)) = arr
  140.         .Range("o2").Resize(d1.Count, UBound(brr)) = Application.Transpose(Application.Transpose(d1.items))
  141.         .Range("t3").Resize(UBound(drr), UBound(drr, 2)) = drr
  142.     End With
  143.     Application.ScreenUpdating = True
  144.     MsgBox "考场排列完毕!"
  145. End Sub


复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-15 08:58 | 显示全部楼层
修改好了。

工作簿1.rar

112.63 KB, 下载次数: 30

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-15 13:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
凑个热闹。随机生成考场安排
image.jpg

随机排考场.zip

109.17 KB, 下载次数: 17

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-16 08:48 | 显示全部楼层
楼主这个排考场,有没有考虑到不同选科在不考试的时间,学生回本班级自修呢。比如:物生地选科的考生在不考史化政的时间段内要回本班级自修,却发现本班被别的选科考试占用了教室呢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-16 09:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sunshuangzhong 发表于 2024-4-16 08:48
楼主这个排考场,有没有考虑到不同选科在不考试的时间,学生回本班级自修呢。比如:物生地选科的考生在不考 ...

没有你说的情况。我校这边物理化学捆绑,相当于一门学科。政治历史捆绑,相当于一门学科。只开设了4个组合。分别是物化生,物化地;政史生,政史地。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-16 10:27 | 显示全部楼层
ooluckydog 发表于 2024-4-15 13:41
凑个热闹。随机生成考场安排

感谢。太好用了。学校平常周考排考场一般都是按照成绩由高到低排,只有在期末,县级联考时才用随机排考场。能否添加一下各个学科的考场数和尾考场人数。如图 123.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-17 10:12 , Processed in 0.034145 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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