“轻”文对学生座位的编制过程是这样讲的:“在Excel中直接利用鼠标拖动单元格数据的功能,编好学生的位置”,对这个过程,虽说是用鼠标拖动,但考虑到学生数量很多,这个工作量实际上并不轻松。再说,学生的座位是经常调整的,对于座位的局部调整后的处理,“轻”文没有涉及。恰好本人也曾做过这方面的工作,同样采用的是编写VBA代码的方式,真正轻松的解决了学生座位的编制问题。而且,由于在程序开头增加了一个交互的设计(只需要输入实际学生的排列方法,即行、列数,程序自动计算出学生人数),程序的通用性和可移植性更强了,下面是实现的方法。
准备工作
首先打开学生的“学籍表”工作簿,将相应的工作表命名为“学籍表”,我们主要是利用其中的“身高”、“是否近视”、“听力”等数据将学生进行排序(个别的顺序用手工进行调整),然后利用这个程序,创建一个新的名为“座位表”的工作表,把“学籍表”中调整好的“姓名”列数据复制到“座位表”中,巧妙利用循环把这些数据重新组织编排,形成“座位表”。
如果大家有兴趣,完全可以把“轻”文中代码适当修改后添加在本代码的后面(考虑到文章的篇幅,本文没有将它们合并到一起),这样只要轻轻一点鼠标,就可以真正轻松的实现座位表的全自动编制了,呵呵。
程序代码
Sub 排座位()
'
' 排座位 Macro
' chen jin hong 记录的宏 2002-4-20
'
'提供一个交互的环境,提示输入实际原始数据
num = InputBox("您的班级学生人数是?", "请输入")
强国说学习qiangguoshuo.com
col = InputBox("座位表的列数是?", "请输入")
Row = num col + 1
'计算座位表的行数(排)
'从学籍表中复制出学生姓名,在当前工作簿中插入一工作表,并命名为“座位表”
Sheets("学籍表").Select
Range("B2:B100").Select
'选中学生姓名
Selection.Copy
'复制到剪贴板上
Sheets.Add
'新增一工作表
ActiveSheet.Name = "座位表"
'命名为“座位表”
Range("A1").Select
'选中A1单元格,准备粘贴
ActiveSheet.Paste
'将剪贴板中内容粘贴到“座位表”A列
'以下按照5×8的格式将学生安排到指定座位,形成座位表的形式
For n = 2 To num
sSourceCell = "A" && n
'移动的源单元格地址
stemp1 = (n - 1) Mod col
'计算目标单元格地址
stemp2 = (n - 1) col + 1
'目标单元格的行标
stemp3 = Chr(Asc("A") + stemp1)
'目标单元格的列标
sDestCell = stemp3 && stemp2
'形成目标单元格地址
Range(sSourceCell).Select
'选中源单元格
Selection.Cut Destination:=Range
(sDestCell) '移动到目标单元格
Next
Range("A1").Select '将光标移动到A1单元格,结束程序
End Sub
转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!