用VBA编排学生座位表
用Excel VBA轻松实现座位表的编排
单击 V A代码编辑窗口中的际 准】 B 工具栏中的[ i 主
行子过程, 用户窗 口1 或按 F 5键 , 在座位 表 中弹 出一 则 个 如图 1 所示 的对话框 。 () 3 建立新 的函数 Z oi ) 来 排位 , 击【 uc(用 单 插入 】 /
【 模块】在代码窗 口中输入如下 代码 : ,
Itg r ne e
“ 视力表 ” 输入学 号 、 姓名 和视力 等有关 数据 并将其按
“ 视力 ” 排序 。
收稿 日期 :0 - 0 1 21 1- 9 0 作 者 简介 : 瑞梅 (98 )女 , 师, 连 16一 , 讲 学士 , 究方 向: 研 计算 机应 用 , 计算机 研 究与教 学 。
Wa l函数将字符转换 为数字 将输入 的数字赋给变量 G op r u G op=V lIp to(本班学生分为几组 ) r u a( uB x ” n )
En u dSb
作表格。 种做法是 很麻烦 的 , 这 因为每编 制一次都需要
重 复同样 的工作 。因此 , 研究一种 简单有效 的方法来编
Is= i+ 2 x
Frj= 3 T rw o o I s+ 3 o
给座位表赋值
S et ” he ( 座位 表 ”.e sji= S et ” s ) l (, Cl ) he ( 视力 s 表” .e sI ,) ) l (x 2 Cl s
再在 Z o i) uc( 函数的倒数第二行加人如下代码 : Z oi ru )调用 Z oi uc( o p g u c 函数对学生进行排座 按 F 健 弹出如 图 2 5 所示 的宏对话 框。单击【 】 运行 命令 按钮 , 在弹 出的对话 框 中输 人 “0 , 击 “ l” 单 确定 ” ,
巧用Excel VBA随机均衡分班
以及 I N D E X语句 ,而 其 中的 I N D E X则 会影 响 C R E A T E I N —
D E X和 A L T E R I N D E X D D L命令 。不管用 户是直 接还是 间接
访 问受保 护的表 、视图还 是类似对 象 ,都 将透 明地 激活 R L S 保护策略 ,并执行注册 的 P US Q L函数 ,然后修改原来 的 S Q L
操作。
S QL >S E L E C T C OU N T ( ) T o t a l — R e c o r d s F R 0M e mp ;
T O1 _ AL RE C0RDS
1 4
S QL >C ONN s y s t e m/ ma n a g e r ;
可 见 .由函数 实现的安全 策略可 以随意更 改 .而 不需要
利用 D B MS — R L S包 重 新 注 册 。
了e n a m e = U S E R ,而另一个策 略 ( 针对 相同对象 的相 同 D M操 作 )返回了 s a l > 2 0 0 0 ,那么数据库将 自动添加这两个策略 ,从
施其安全 策略 ,从而 任何使用数据 库 中数 据的应用 程序 都可 以 自动得到安全策略的保护 。
将 在 表 、视 图或 者 类 似 的对 象 中 注册 。D B MS _ R L S并 没 有 被授 予 每一位 用户 ,管理 员需 要拥有 直接 执行该 包 的权限 。 而 A D D _ P O L I C Y则 至 少需 要 得 到策 略将 要 应 用 的对 象 的名 字 、策 略 的名 字 以 及 实 施 安全 保 护 策 略 的 P L / S Q L函数 的
通 过 调用 D B MS _ R L S . A D D — P O L I C Y 过 程 ,P L / S Q L 函 数
用VBA编排学生座位表
<用VBA编排学生座位表(2011-09-10 23:10:47)转载分类:技术交流标签:it在每学年的新生开学前,班主任老师要做大量的准备工作,其中必做的一件事就是收集本班学生的报名信息,编排上课的座位表。
以往班主任老师都是通过手工来编排座位表的,消耗的时间和精力相当大,一旦有学生进行了调整又不得不重复之前的劳动。
下面我们就来看看如何用VBA轻轻松松实现座位表的编排。
通常情况下,编排座位表需要考虑以下三个因素,即学生的视力、身高、性别等,根据学生在报名表中填写的信息,我们采集了相关的数据(如图1)。
&利用“控件工具箱”中的“命令按钮”控件在工作表中添加一个命令按钮,修改其“Caption”属性为“排座位”,双击该按钮,在其Click事件中编写下面的代码:Private Sub CommandButton1_Click()On Error GoTo errDim fenzu As IntegerDim irow As IntegerRange("D2").Select'对信息表进行排序,关键字分别为视力、身高、性别#Range("A3:E48").Sort Key1:=Range("E3"), Order1:=xlAscending,Key2:=Range( _"D3"), Order2:=xlAscending, Key3:=Range("C3"), Order3:=xlAscending'删除原有的座位表For Each sh In WorksheetsIf = "座位表" Then= FalseSheets("座位表").DeleteEnd If{Next sh'添加名为座位表的新工作表after:=Sheets("学生信息")= "座位表"'获取分组数fenzu = InputBox("你想把学生分成几个小组", "提示", 6)'获取学生总人数icount = Worksheets(1).[a65536].End(xlUp).Row - 2''获取每组最多学生人数irow = Int(icount / fenzu) + 1'按先行后列的顺序提取学生信息表中的学生名单For n = 1 To irowFor m = 1 To fenzu'生成第N组的文字(前面空2行用于显示标题)Worksheets(2).Cells(3, m) = "第" & m & "组"Worksheets(2).Cells(n + 3, m) = Worksheets(1).Cells(fenzu * (n - 1) + m + 2, 2)…Next mNext nMsgBox "座位表编排成功,请根据实际情况手工微调!", vbOKOnly + vbInformation, "提示"err:Exit SubEnd Sub代码说明:(1)为了使编排的座位表更加合理,我们把视力低的同学尽量往前排,相同视力的同学按身高的高矮顺序排,如果身高又相同则女生排在前面,男生排在后面。
VBA在Excel中实现表格排序的方法总结
VBA在Excel中实现表格排序的方法总结Excel是一款功能强大的数据处理工具,而VBA(Visual Basic for Applications)是其自带的编程语言,提供了许多功能强大的数据处理和自动化操作的方法。
其中之一就是通过VBA在Excel中实现表格排序。
本文将总结VBA中几种常用的表格排序方法,供读者参考和学习。
一、VBA中的Range对象在VBA中,Range对象用于表示Excel中的单元格或一系列单元格。
通过指定Range对象的属性和方法,我们可以在VBA中对表格进行排序。
下面是一个实例,展示如何使用Range对象进行排序:```Sub SortRange()Dim ws As WorksheetDim rng As Range' 指定要排序的工作表和范围Set ws = ThisWorkbook.Worksheets("Sheet1")Set rng = ws.Range("A1:C10")' 对范围内的数据进行排序rng.Sort Key1:=rng.Columns(1), Order1:=xlAscending,Header:=xlYesEnd Sub```上述代码首先使用`Set`语句指定了要排序的工作表和范围。
接着,通过调用`Sort`方法对范围内的数据进行排序。
在这个例子中,我们通过`Key1`参数指定了基于第一列进行排序,`Order1`参数指定了升序排序,`Header`参数指定了有表头。
根据需求,可以根据实际情况进行调整。
二、VBA中的ListObject对象除了使用Range对象,我们还可以使用ListObject对象来实现表格排序。
ListObject对象是Excel中用于处理数据表的对象,它提供了更多的排序选项和灵活性。
下面是一个使用ListObject对象进行排序的示例:```Sub SortListObject()Dim ws As WorksheetDim tbl As ListObject' 指定要排序的工作表和表格Set ws = ThisWorkbook.Worksheets("Sheet1")Set tbl = ws.ListObjects("Table1")' 对表格进行排序tbl.Sort.SortFields.Cleartbl.Sort.SortFields.Add Key:=tbl.Range.Columns(1), _SortOn:=xlSortOnValues, _Order:=xlAscending, _DataOption:=xlSortNormalWith tbl.Sort.SetRange tbl.Range.Header = xlYes.MatchCase = False.ApplyEnd WithEnd Sub```上述代码首先使用`Set`语句指定要排序的工作表和表格。
excel用vba排序实例
excel用vba排序实例Excel VBA排序实例:一步一步解析导语:Excel VBA是一项强大的功能,可以帮助我们自动化处理数据集。
其中之一的排序功能,可以帮助我们快速整理数据。
本文将基于Excel VBA 来讲解如何进行排序,希望能帮助读者更好地利用Excel VBA进行数据处理。
一、背景介绍在日常的数据处理工作中,当我们需要对大量数据进行整理和分析时,往往需要将数据进行排序。
Excel提供了内置的排序功能,但对于复杂的数据集来说,手动一步一步排序可能会十分繁琐,这时候Excel VBA就派上了用场。
二、准备工作在开始之前,我们需要先准备好待排序的数据集。
在本例中,我们假设有一个学生成绩表,包含学生姓名、语文成绩、数学成绩和英语成绩四个字段。
我们的目标是按照总成绩对学生进行降序排列。
三、编写VBA代码1. 打开Excel,按下"ALT + F11"组合键,打开VBA编辑器。
2. 在VBA编辑器中,选择“插入”菜单下的"模块"。
3. 在新建的模块中,编写以下代码:vbaSub SortData()Dim rng As RangeDim LastRow As Long' 定义要排序的范围Set rng = Range("A1").CurrentRegion' 计算最后一行的行数LastRow = rng.Rows.Count' 使用排序功能将数据按总成绩降序排列rng.Sort Key1:=Range("D2:D" & LastRow),Order1:=xlDescending, Header:=xlYesEnd Sub四、代码解析1. 首先,我们使用`Dim`语句声明了两个变量`rng`和`LastRow`,分别用于存储数据范围和最后一行的行数。
2. 然后,我们使用`Set`语句将`rng`定义为以"A1"单元格为起始点的当前区域。
ExcelVBA(15)–用VBA给表格排序
ExcelVBA(15)–⽤VBA给表格排序本⽂转载⾃公众号:Excel学习世界,作者:我是⼩花椒。
如有侵权,请联系我删除。
今天讲解如何⽤ VBA 给表格排序。
案例:对下表排序,排序优先顺序依次为“实际奖⾦”和“奖⾦基数”,从⼤到⼩排。
⽅法:1. 按 Alt F11 打开 VBE,输⼊以下代码:Sub st()Range('A1:E9').CurrentRegion.Sort KEY1:=Range('E1'), ORDER1:=xlDescending, _KEY2:=Range('C1'), ORDER2:=xlDescending, _Header:=xlYes'设置需要排序的区域范围'A1:E9',第⼀、第⼆排序字段依次为'E1'和'C1',顺序都为倒序,第⼀⾏需要包含标题End Sub部分代码释义:Range('A1:E9').CurrentRegion.Sort:对括号中的区域排序KEY1:=Range('E1'), :第⼀个排序字段为 E1,即“实际奖⾦”ORDER1:=xlDescending:第⼀个排序顺序是降序排列。
如果需要升序,= 后⾯就写 xlAscending_:空格下划线是 vba 代码换⾏符,代码过长的情况下,换⾏会增加可读性。
代码虽然换⾏,但还是⼀整句,所以在这后⾯⽆法添加注释Header:=xlYes:需要包含标题,如果不需要,就写 xlNo2. 制作按钮:1) 在表格界⾯点击“开发⼯具”-->“插⼊”-->“按钮”2) 将按钮名称改为“排序”3) 将按钮的宏指定为上述“st”3. 现在点击按钮运⾏代码,就已经按照我们要求排序了。
用Excel VBA轻松实现座位表的编排
用Excel VBA轻松实现座位表的编排
连瑞梅
【期刊名称】《农业网络信息》
【年(卷),期】2007(000)002
【摘要】使用Excel绑定的VBA编辑器,能够减轻操作者的工作负担,使Excel的大量重复性操作变得简单而快捷.本文主要介绍如何用Excel VBA来轻松实现学生座位表的编排.
【总页数】2页(P119-120)
【作者】连瑞梅
【作者单位】潍坊学院,山东,潍坊,261061
【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于EXCEL+VBA的电大考务编排辅助系统设计与实现 [J], 赵斌
2.利用EXCEL实现大型会议座位表的自动编排 [J], 郑树旭
3.基于Excel VBA实现考试自动编排 [J], 周志军;张帆;窦志强
4.巧用Excel与VBA实现座位表的自动生成 [J], 王月兰
5.利用Excel和VBA轻松实现批量抽签 [J], 但山秀
因版权原因,仅展示原文概要,查看原文内容请购买。
利用VBA在Excel中开发普通高中考试排座系统
利用VBA在Excel中开发普通高中考试排座系统作者:娄青来源:《中国教育信息化·基础教育》2012年第07期摘要:文章介绍利用VBA在Excel中如何开发普通高中考试排座系统,并给出了详细代码。
关键词:Excel;VBA;考试排座系统中图分类号:TP391 文献标识码:B 文章编号:1673-8454(2012)14-0088-05考试在普通高中学校教学过程中有着极其重要的地位,它能检测学生知识掌握程度,能检查教师教学情况,能衡量一所学校办学质量,因此学校常常举行各种月考和联考。
在一所普通高中学校里,往往有三个年级和文理分科情况,一次考试过程中学生考场和座位的安排就是一项任务繁重的工作,一般的考试分析系统没有考生座位安排模块,主管考试工作的教师就经常进行学生试场手工安排的重复性工作。
微软的Excel软件为大家所熟悉和掌握,教师都非常喜欢用它来处理各种教学事务,经过笔者研究,发现Excel软件工作表的单元格排列方式跟考场座位安排有相似之处,都比较工整有序有规律,为此有了利用Excel软件和VBA技术开发普通高中考试排座系统的想法,并进行尝试和实现。
由于高中存在三个年级和文理分科的情况,考试排座就显得非常复杂,我们以高三理科排座为例讲述普通高中考试排座系统,其余排座方法与此差不多,不再重复。
该系统由四个程序模块和五个Excel工作表组成,“高三理科”工作表存放高三理科学生名单,“高三座位”工作表存放各试场座位情况,“试场安排”工作表存放试场人数与各排人数,“班级情况”工作表存放班级数和各班学生人数,“试场分布”工作表存放试场号与试场位置。
下面就四个程序模块代码加以详细说明。
一、系统初始化模块在该模块代码中,程序取得“班级情况”工作表上的数据,如图1所示,赋予并初始化各系统参数,为接下来的排座做好准备,其程序代码如下(附有程序注解):Option ExplicitPublic Gao3LiBanShu As Integer '高三理科班级数Public Gao3Li(20) As Integer '高三理科各班人数Public Gao3Row As Integer '工作表有效行数Public ShiChangHao As Integer '试场号Public ZongShiChang As Integer '总试场数Public ShiChangShu As Integer '试场满员的试场数Public YuShu As Integer '余数(未满员试场的学生人数)Sub Init()Dim i As IntegerGao3LiBanShu = Worksheets("班级情况").Cells(1, 4).Value '取得高三理科班级数For i = 1 To Gao3LiBanShuGao3Li(i) = Worksheets("班级情况").Cells(2 + i, 4).Value '取得高三理科各班人数Next iEnd Sub二、随机排试场模块该模块进行随机方式的试场安排,在程序代码中,根据前面获得的初始化参数计算高三理科学生(如图2“高三理科”工作表所示)人数,并取得“试场安排”工作表的试场人数,如图3所示,由高三理科人数与试场人数计算得出满员试场数和未满员试场人数,对“高三理科”工作表选择的试场列区块产生随机数,同时对随机数进行排序,利用循环语句对满员的试场进行排座,最后对未满员的试场进行排座,如图4试场列所示,其程序代码如下:Sub PaiShiChang() '进行随机方式排试场Dim i As IntegerDim j As IntegerShiChangHao = 0 '初始化试场号,若前面有排过别的试场,ShiChangHao = ShiChangHaoWorksheets("高三理科").Activate '激活高三理科工作表Gao3Row = 1For i = 1 To Gao3LiBanShuGao3Row = Gao3Row + Gao3Li(i) '高三理科表最大有效行数Next iShiChangShu = (Gao3Row - 1) \ Worksheets("试场安排").Cells(4, 2).Value '整除取得试场数YuShu = (Gao3Row - 1) Mod Worksheets("试场安排").Cells(4, 2).Value '整除余数为多少人Cells(1, 3).Value = "试场"Cells(Gao3Row, 3).SelectRange(Selection, "c2").Select '选择试场列区块Selection.Value = "=rand()" '产生随机数Cells(Gao3Row, 3).SelectRange(Selection, "a2").Select'排序,第一关键字:随机数,第二关键字:学号Selection.Sort key1:=Columns(3), order1:=xlAs cending, key2:=Columns(1),order2:=xlAscendingFor i = 1 To ShiChangShu '进行满员的试场排座位For j = 1 To Worksheets("试场安排").Cells(4, 2). Value '进行一个试场的排座位Cells(Worksheets("试场安排").Cells(4, 2).Value * (i - 1) + 1 + j, 3).Value = i + ShiChangHao '赋予试场号Next jNext iZongShiChang = ShiChangShuIf YuShu 0 Then '排最后一个试场For j = 1 To YuShuCells(ShiChangShu * Worksheets("试场安排").Cells(4, 2).Value + 1 + j, 3).Value = ShiChangShu + 1 + ShiChangHaoNext jZongShiChang = ZongShiChang + 1 '高三理科总试场数End IfEnd Sub三、考场座位安排模块该模块进行各试场座位安排,在程序代码中,取得“试场安排”工作表的各排人数,即为各试场排座的各排人数,如图3所示。
EXCEL VBA在考场编排中的设计与实现
力. 使用户更高效地完成特定任务 。
软件 分为试 场编 排 、 座位 表生成 、 桌 贴 的人员将 基本数 据 , 如 考 生 名 册 ( 含 班级 ) 、 考场基 本信 息 ( 考 场名称 、 每考 场人数 等 ) 录
《 中国教 育信息化 编辑部 : m i s @m o e . e d u . c n
E XC E L V B A在考场编排中的设计与实现
钱建明
( 杭 州市萧 山区新街镇初级 中学, 浙江 杭 州 3 1 1 2 1 7 )
摘 要: 为保 证 考试 的 公 平 、 公正及其严肃性 , 科 学 的考 场座 位 编 排 是 一 个重 要 手 段 。 文章 介 绍 的 是 利 用E XC E L V B A编写考场编排软 件的设计和 实现 , 利用此软件 , 可 轻 松 实 现 学校 考 试 中繁 琐 的 考 场 编 排 、 座位表 、 桌贴 、 班 级 考 生 分 布 等 的 一 次 性 生 成 及 打 印 。经 实 际 应 用 , 操 作 简单 , 方 便 实用 。
在编排试场 时 , 要 尽 量 保 证 学 生 座 位 的 随 机 性 。对
大的 比重 , 而考场 座位编排是考 务信息化管理 中一项十
分 重要的工作 。 考 务 工 作 主 要 分 为 考 前 的 考 场 编 排 和 考 后 的成绩统计 与分析 , 这 里 专 门 就 考 前 的考 场 编 排 展 开 分析和讨论 。 随着 学 校 办 学 规模 逐 渐 扩 大 和 学 生 人 数 的 增加, 考 场 安 排 的工 作 量 不 断加 大 。 因此 , 笔 者 决 定 编 写
关键词 : 随机 ; 试场编排 ; 座位表 ; 桌贴
中图 分 类 号 : T P 3 9 3 文献标志码 : B 文章编号 : 1 6 7 3 — 8 4 5 4 ( 2 0 1 4 ) 1 4 — 0 0 6 5 —0 5
Excel VBA编程 典型实例——使用VBA进行排序
Excel VBA编程典型实例——使用VBA进行排序使用Excel 2007提供的排序按钮进行排序时,会将班级或学生的姓名也一起按升序或降序的方式进行排序,从而打乱了数据原有的顺序。
使用VBA代码对工作表进行排序时,只会在每个数据的后面标注出该数据处于的名次,而不会打乱数据原有的顺序。
1.练习要点● 冒泡算法的应用● 循环语句2.操作步骤:(1)新建一个空白工作表,创建如图7-12所示的表格。
图7-12 创建成绩表(2)单击【控件】组中的【插入】下拉按钮,在【ActiveX 控件】组中,选择【命令按钮(ActiveX 控件)】按钮。
然后,在工作表中绘制该按钮,如图7-13所示。
图7-13 绘制控件按钮(3)选择所绘制的“命令控件”按钮,并在【属性】对话框中,设置Caption 为“成绩排序”文字,如图7-14所示。
图7-14 设置按钮属性提 示单击【控件】组中的【控件属性】按钮,即可打开【属性】对话框。
、(4)选择“成绩排序”命令按钮,在【属性】对话框中,单击Font 右侧的【浏览】按钮,如图7-15所示。
创建选择绘制效果图7-15 单击【浏览】按钮(5)在弹出的【字体】对话框中,设置【字体】为“隶书”;【大小】为“三号”,如图7-16所示。
图7-16 设置字体格式技 巧选择“命令控件”按钮中的文字,在【字体】选项卡中,也可以设置控件的字体格式。
(6)在弹出的代码编辑器窗口中,输入如图7-17所示的代码。
图7-17 输入代码其中,在代码编辑窗口中输入的代码如下:Private Sub CommandButton1_Click()Dim myarray()Dim m, n, i, j As Integern = Application.WorksheetFunction.CountA(Columns(1))'从第二列到第八列一共循环七次For m = 2 To 8'给数组赋值ReDim myarray(n)For i = 3 To nmyarray(i) = Cells(i, m).ValueNext i选择单击设置 效果输入'用冒泡排序法对数组中的元素进行排序操作For j = 0 To n - 2For i = n To j + 2 Step -1If myarray(i) > myarray(i - 1) Thentemp = myarray(i)myarray(i) = myarray(i - 1)myarray(i - 1) = tempEnd IfNextNextFor i = 1 To nDebug.Print myarray(i)Next i'将各数值在列中的排名加括号后添加到原单元格的数值后面,中间空一个空格For i = 3 To ns = Application.WorksheetFunction.Match(Cells(i, m), myarray, -1) - 1Cells(i, m).Value = Cells(i, m).Value & Space(1) & "(" & s & ")"Next iNext m'主体程序执行完毕使各列的宽度与单元格的大小相适应Cells.SelectSelection.Columns.AutoFitCommandButton1.Enabled = TrueMsgBox "排序完成!", vbOKOnly, "提示框"End Sub(7)单击【控件】组中的【设计模式】按钮,即可取消该模式。
vba 学生成绩年级班级排名表
VBA学生成绩年级班级排名表一、背景介绍在学校教学管理中,学生成绩的排名表是非常重要的一项工作。
通过排名表,老师可以清楚地了解每个学生的学习情况,及时发现学习中存在的问题,并针对性地进行个别辅导。
而在大班级的情况下,手工制作排名表往往效率低下,容易出错。
利用VBA技术编写学生成绩年级班级排名表,可以提高工作效率,减少出错率,方便教师管理学生成绩。
二、VBA编写学生成绩排名表的思路1. 获取学生成绩数据需要从教务系统或Excel表格中获取学生成绩数据,包括学生尊称、考试成绩等信息。
在获取数据时,要确保数据的准确性和完整性。
2. 计算学生成绩排名利用VBA编写程序,对学生成绩进行排名计算。
通常情况下,学生成绩排名是按照总分从高到低进行排名。
在编写程序时,需要考虑同分的情况,并做出合理的排名规则。
3. 生成排名表根据计算出的学生成绩排名,利用VBA生成相应的排名表。
排名表通常包括学生尊称、班级、年级、总分和排名等信息。
排名表的格式可以根据实际需求进行设计,以便老师查阅和使用。
4. 自动化更新排名表考虑到学生成绩会不断更新,因此需要编写VBA程序实现排名表的自动更新功能。
当有新的成绩数据输入时,排名表能够自动进行更新,确保教师获取到的排名表是最新的数据。
三、VBA编写学生成绩排名表的实现步骤1. 数据准备需要准备学生成绩的数据,可以是从教务系统导出的Excel表格,也可以是手动录入的数据。
确保数据的准确性和完整性,以便后续的编写程序。
2. 编写排名计算程序利用VBA编写排名计算程序,包括对学生成绩进行排序和排名的功能。
在编写程序时,要考虑到同分的情况,确保排名的准确性。
3. 设计排名表格式根据实际需求,设计排名表的格式。
包括表头、学生尊称、班级、年级、总分、排名等信息。
排名表的格式应简洁明了,方便老师查阅和使用。
4. 编写自动更新程序编写VBA程序,实现排名表的自动更新功能。
当有新的成绩数据输入时,排名表能够自动更新,确保教师获取到的排名表是最新的数据。
安排学生考试座位
安排学生考试座位在excel中有57个学生,按学号排序,如何实现给他们随机安排考试座位号方法1假如A列是学号1,2,3,……,57。
B列是姓名,在C1中输入=rand(),向下拖拽填充柄至57,在C列产生随机数0.5640531560.2264650420.0741012380.792663650.049040850.268217066再按C列排序,A列就是你要的随机安排考试座位号了。
方法21/在学号前插入两列,A列标题考证号,B列标题随机号,2/在B2中输入公式=int(rand()*57),然后向下拉到第58行.3/对B列进行排序4/然后在A1输入1,按住ctrl向下拉到57,即可得到对应学员的考试号.方法3在工作表中按Alt+F11,打开VBA编程界面,在工具栏第二个图标拉下来,选模块在左边栏双击“模块1”并在右边打开的程序书写区粘贴如下代码Sub GetRnd()Dim rn As RangeDim rnn As IntegerDim cRn As RangeSet rn = Selectionrn.ClearContentsrnn = rn.Cells.CountFor Each cRn In rnDocRn = 1+Int(rnd() * rnn)Loop Until Application.WorksheetFunction.CountIf(rn, cRn) = 1NextEnd Sub现在回到工作表,假如你的学号在A1:A57,那么你就选中B1:B57或C1:C57(或D1:D57),反正只要是空的就行,然后按Alt+F8,在打开的对话窗口中选GetRnd并单击“执行”按钮,你就会在你选中的区域内看到一个随机的数序列。
这就是学生的座位号。
这个程序有一点是比较通用的,不一定要拿来排座位,你如果选中12个单元格(无论是一列还是多列,也无论是一行还是多行),用Alt+F8运行它,它就自动会在这些格内产生1-12的不重复的随机数。
利用VBA实现自动排列打印考试座次表
用VBA实现自动排列、打印考试座次表考试是学校考查教师教学效果,教师了解学生学习情况,从而提高教学质量的一项常规工作,也是国家选拔人才的重要手段。
编排考试座次表这种简单重复的工作,以前考务人员采用复制、粘贴的手段来编排、打印,耗费了大量时间和精力。
本人利用VBA制作的这个软件,能自动编排打印考试座次表,从而轻松完成上述工作,为你节约大量的时间和精力。
一、准备工作1、在Excel中建立一个有5张工作表的工作薄,将其名称分别改为:考生名单、40人顺序打印、按30人首尾相连、按40人首尾相连、按50人首尾相连;2、将“考生名单”工作表按如图1格式建好,要求:第一行为标题,第一列存放考号数据,第二列存放班次数据,第三列为姓名,以后各列可有可无,然后按考号(或班次或总分等)排好顺序。
3、将工作表“40顺序打印”、“按30人首尾相连”、“按40人首尾相连”、“按50人首尾相连”分别按图2、图3、图4、图5格式建好。
其中标题文字、行列的宽高、字体、字型、字号等可按自己的需要作相应的改动。
图1二、编写VBA代码1、按“40人顺序打印”代码在“40人顺序打印”工作表中添加一个“按钮”控件,在“指定宏”窗口中将宏名改为“40人顺序打印”,单击新建,然后在代码窗口中输入以下头代码:Sub 按40人打印()Dim ipage As Integer, page As Integer, line As Integer, x As Integer,y as Integer, icount As IntegerApplication.ScreenUpdating = Trueicount = Sheets("考生名单").[a1].CurrentRegion.Rows.Count – 1 //统计考生人数If icount / 40 = Int(icount / 40) Then //计算考室数ipage = icount / 40Elseipage = Int(icount / 40) + 1End IfSheets("40人顺序打印").SelectFor page = 0 To ipage – 1 //为1至最后考室编排座次Cells(1, 10) = page + 1 //在第一行第十列填写考室序号line = page * 40 + 2 //在”考生名单”中查找本考室第一列第一名考生For x = 4 To 11 //为4至11行填写数据For y=1 to 19 //为每一行中1至9列中不被4整除的列填写考号、班次、姓名if y/4<>int(y/4) thencells(x,y)=Sheets("考生名单").Cells(line+(int(y/4)*8),y-int(y/4)*4) //将”考生名单”中”考号”、“班次”、End If //“姓名”填入座次表相应座位中Next yline = line + 1 //考生下移一位Next xSheets("40人顺序打印").PrintOut //打印本考室座次表Next pageEnd Sub图22、“按30人首尾相连”打印代码操作如前“40人顺序打印”,代码如下(部分语句注解同前):Sub 按30人首尾相连()Dim ipage As Integer, page As Integer, line As Integer, x As Integer, y As Integer,icount As IntegerApplication.ScreenUpdating = Trueicount = Sheets("考生名单").[a1].CurrentRegion.Rows.Count - 1If icount / 30 = Int(icount / 30) Thenipage = icount / 30Elseipage = Int(icount / 30) + 1End IfSheets("按30人首尾相连").SelectFor page = 0 To ipage - 1Cells(1, 8) = page + 1line = page * 30 + 2 //查找第一列第一位考生For x = 4 To 11 //填写考室第一列考生数据For y= 1 to 3 //填写本列每一考生数据Cells(x, y) = Sheets("考生名单").Cells(line, y)Next yline = line + 1 //考生下移一位Next xline = page * 30 + 16 //查找第二列第一位考生For x = 5 To 11 //填写考室第二列考生数据For y = 5 To 7 //填写本列每一考生数据Cells(x, y) = Sheets("考生名单").Cells(line, y - 4)Next yline = line – 1 //考生前移一位Next xline = page * 30 + 17 //查找第三列第一位考生For x = 5 To 11 //填写考室第三列考生数据For y = 9 To 11Cells(x, y) = Sheets("考生名单").Cells(line, y - 8)Next yline = line + 1 //考生下移一位Next xline = page * 30 + 31 //查找第四列第一位考生For x = 4 To 11 //填写考室第四列考生数据For y = 13 To 15Cells(x, y) = Sheets("考生名单").Cells(line, y - 12)Next yline = line – 1 / /考生前移一位Next xSheets("按30人首尾相连").PrintOutNext pageEnd Sub图33、“按40人首尾相连”打印代码操作如前“40人顺序打印”,代码如下(部分语句注解同前):Sub 按40人首尾相连()Dim ipage As Integer, page As Integer, line As Integer, x As Integer, y As Integer, icount As IntegerApplication.ScreenUpdating = Trueicount = Sheets("考生名单").[a1].CurrentRegion.Rows.Count - 1If icount / 40 = Int(icount / 40) Thenipage = icount / 40Elseipage = Int(icount / 40) + 1End IfSheets("按40人首尾相连").SelectFor page = 0 To ipage - 1Cells(1, 10) = page + 1line = page * 40 + 2For y = 1 To 5For x = 4 To 11If y / 2 <> Int(y / 2) Then //排列奇数列考生数据,下面三行语也可采用一个循环语句实现Cells(x, (y - 1) * 4 + 1) = Sheets("考生名单").Cells(line + (y - 1) * 8, 1)Cells(x, (y - 1) * 4 + 2) = Sheets("考生名单").Cells(line + (y - 1) * 8, 2)Cells(x, (y - 1) * 4 + 3) = Sheets("考生名单").Cells(line + (y - 1) * 8, 3)line = line + 1Else //填写偶数列考生数据Cells(x, (y - 1) * 4 + 1) = Sheets("考生名单").Cells(line + (y - 1) * 8 - 1, 1)Cells(x, (y - 1) * 4 + 2) = Sheets("考生名单").Cells(line + (y - 1) * 8 - 1, 2)Cells(x, (y - 1) * 4 + 3) = Sheets("考生名单").Cells(line + (y - 1) * 8 - 1, 3)line = line - 1End IfNext xNext ySheets("按40人首尾相连").PrintOutNext pageEnd Sub图44、“按50人首尾相连”打印代码操作如前“40人顺序打印”,代码如下(部分语句注解同前):Sub 按50人首尾相连()Dim ipage As Integer, page As Integer, line As Integer, x As Integer, y As Integer, icount As Integer Application.ScreenUpdating = Trueicount = Sheets("考生名单").[a1].CurrentRegion.Rows.Count - 1If icount / 50 = Int(icount / 50) Thenipage = icount / 50Elseipage = Int(icount / 50) + 1End IfSheets("按50人首尾相连").SelectFor page = 0 To ipage - 1Cells(1, 9) = page + 1line = page * 50 + 2For y = 1 To 5For x = 4 To 13If y / 2 <> Int(y / 2) ThenCells(x, (y - 1) * 4 + 1) = Sheets("考生名单").Cells(line + (y - 1) * 10, 1)Cells(x, (y - 1) * 4 + 2) = Sheets("考生名单").Cells(line + (y - 1) * 10, 2)Cells(x, (y - 1) * 4 + 3) = Sheets("考生名单").Cells(line + (y - 1) * 10, 3)line = line + 1ElseCells(x, (y - 1) * 4 + 1) = Sheets("考生名单").Cells(line + (y - 1) * 10 - 1, 1)Cells(x, (y - 1) * 4 + 2) = Sheets("考生名单").Cells(line + (y - 1) * 10 - 1, 2)Cells(x, (y - 1) * 4 + 3) = Sheets("考生名单").Cells(line + (y - 1) * 10 - 1, 3)line = line - 1End IfNext xNext ySheets("按50人首尾相连").PrintOutNext pageEnd Sub图5以上几种编排方案已基本上满足各种考试的需要,如有其它格式的需要,只需参考上面代码作相应改动即可,相信它定能为你的工作带来极大的方便。
巧用Excel批量生成和打印考场座位标签
巧用Excel批量生成和打印考场座位标签为了方便给大家介绍,接下来笔者以4个班级的考生数据为例介绍下实现的过程。
考生名册的生成根据座位标签中需要打印的项目,笔者设计了“考生名册”工作表。
为了体现考试的公平,大家可事先将考生按班级号“1~4”循环的顺序整理好,“座位号”也可根据考场的大小设计成“1~30”的循环号,即每个考场30个考生。
考场座位标签报表的设计考场座位标签的设计要本着美观、实用、节省纸张和便于剪裁的原则,结合实际使用的经验,笔者在一张A4的打印纸上设计了30个座位标签(1行3个,共10行,如下图)。
报表的设计工作在“桌贴”工作表中进行。
开始时可先设计一个座位标签,然后对该标签中要调用的数据进行反复测试。
调用数据的方法是(以第1个考生的座位标签为例),在第1个考生的“准考证号” 所在的B3单元格内输入公式“=INDIRECT(“考生名册!A”&CEILING((ROW()-1)/4,1)*3-2 CEILING(COLUMN()/5,1)-1 ($P$2-1)*30 2)”便得到了该考生的准考证号。
公式中的INDIRECT函数的功能是用于返回指定单元格内的引用(即“考生名册”工作表A3单元格中的准考证号);公式中的“CEILING((ROW()-1)/4,1)*3-2 CEILING(COLUMN()/5,1)-1 ($P$2-1)*30 2”得到的数值为“3”,使用该公式的目的在于指定该考生标签所在单元格区域(“A2:E5”,即4行5列)内返回的都是同一个数字,这样做是为了在其余的“姓名”、“班级”、“考场”和“座号”等单元格中用相同的函数实现对该考生数据的调用,这一功能主要是通过CEILING函数来实现的,该函数的功能是将指定的数值向上舍入为最接近的整数。
接下来就可以用相同的公式来调用该考生的“姓名”、“班级”、“考场”和“座号”等单元格中的数据了,只需将原来公式中的指定的A列分别改为“B”、“C”、“D”和“E”列就可以了。
考试座位编排vba
考试座位编排vba考试座位编排vba程序开发的准备在开发⼩程序前,⾸先要了解“缅茄杯”对座位编排的具体要求。
“缅茄杯”的考⽣来⾃⾼州市61所初级中学(每所中学的考⽣⼈数由3到400不等,总⼈数1848)。
每个试室⼈数限额是30⼈,按5组6⾏编排。
考⽣的座位是随机的并且来⾃同⼀个学校的考⽣的座位前后左右都不能相邻。
其次选⽤⼀个好⽤的开发软件,本⼈就⽤⾃⼰⽐较常⽤的“VB”。
程序的开发程序的开发,是最重要的,⽽且⼜是最艰难的⼀环⼯作,主要⼯作是代码的编写,它要求“算法”精简优化,操作简单,通⽤好⽤,这⾥我按以下⼏部分进⾏设计。
⼀、数据的导⼊“缅茄杯”的考⽣在报名时,是由学校统⼀上送的。
上送的名单是⽤“EXCELL”格式的⽂件上送的,考⽣的详细信息如下图所⽰:为此程序的第⼀部⼯作是完成考⽣基本数据的导⼊。
其代码编写为:Dim ap As Excel.ApplicationDim bk As Excel.WorkbookDim st1 As Excel.WorksheetSet ap = CreateObject("Excel.Application")cd.DialogTitle = "打开EXCEL⽂件"cd.Filter = "*.xls|*.xls"cd.ShowOpenIf cd.FileName = "" Then MsgBox ("⽂件不能为空"): Exit SubSet bk = ap.Workbooks.Open(cd.FileName)Set st1 = bk.Worksheets(1)cols = 1rows = 1'cells(⾏,列)With st1Do Until .Cells(rows, 1).Value = ""'表格⾏数rows = rows + 1LoopEnd Withrenshu = rows - 2For i = 1 To renshub(i) = Trim(st1.Cells((i + 1), 1).Value)c(i) = Trim(st1.Cells((i + 1), 3).Value)xb(i) = Trim(st1.Cells((i + 1), 4).Value)Next ibk.Closeap.QuitSet ap = Nothing⼆、座位的编排这是程序开发的中⼼环节,我设计的思路简单描述是这样的:先为每个学⽣添加⼀个各不相同的随机数字(⼀⾄考⽣总⼈数,这⾥就是1~1848),再把考⽣按这些随机数按升序的顺序排列,依次编排到第⼀个试室⾄最后⼀个试室的1~30的座位中,然后按试室和座位的顺序对每⼀个考⽣进⾏检查,检查他的前后左右是否有同学校的考⽣,如果有则对他进⾏调整。
巧用Excel批量生成和打印考场座位标签
巧用Excel批量生成和打印考场座位标签为了方便给大家介绍,接下来笔者以4个班级的考生数据为例介绍下实现的过程。
考生名册的生成根据座位标签中需要打印的项目,笔者设计了“考生名册”工作表。
为了体现考试的公平,大家可事先将考生按班级号“1~4”循环的顺序整理好,“座位号”也可根据考场的大小设计成“1~30”的循环号,即每个考场30个考生。
考场座位标签报表的设计考场座位标签的设计要本着美观、实用、节省纸张和便于剪裁的原则,结合实际使用的经验,笔者在一张A4的打印纸上设计了30个座位标签(1行3个,共10行,如下图)。
报表的设计工作在“桌贴”工作表中进行。
开始时可先设计一个座位标签,然后对该标签中要调用的数据进行反复测试。
调用数据的方法是(以第1个考生的座位标签为例),在第1个考生的“准考证号” 所在的B3单元格内输入公式“=INDIRECT(“考生名册!A”&CEILING((ROW()-1)/4,1)*3-2 CEILING(COLUMN()/5,1)-1 ($P$2-1)*30 2)”便得到了该考生的准考证号。
公式中的INDIRECT函数的功能是用于返回指定单元格内的引用(即“考生名册”工作表A3单元格中的准考证号);公式中的“CEILING((ROW()-1)/4,1)*3-2 CEILING(COLUMN()/5,1)-1 ($P$2-1)*30 2”得到的数值为“3”,使用该公式的目的在于指定该考生标签所在单元格区域(“A2:E5”,即4行5列)内返回的都是同一个数字,这样做是为了在其余的“姓名”、“班级”、“考场”和“座号”等单元格中用相同的函数实现对该考生数据的调用,这一功能主要是通过CEILING函数来实现的,该函数的功能是将指定的数值向上舍入为最接近的整数。
接下来就可以用相同的公式来调用该考生的“姓名”、“班级”、“考场”和“座号”等单元格中的数据了,只需将原来公式中的指定的A列分别改为“B”、“C”、“D”和“E”列就可以了。
应用VBA轻松编排考试试场
应用VBA轻松编排考试试场【摘要】为了防止学生考试时作弊,有利于班级的管理和教学,本文结合自己的工作经验总结出了一种科学合理地安排考试试场的方法,每次考试编排试场时考生单人单桌,考生座位随机编排,而且前后座位不是同班的同学,同时打印出贴在试场桌子的考生标签。
【关键词】随机函数;四舍五入函数;VBA代码;主要关键字;排序为了尽量防止考生考试时作弊,得到考生比较的真实的成绩,每次考试学校都要求编排试场时学生单人单桌,而且前后座位不能是同班的同学,同时打印出贴在试场桌子的考生标签。
为此笔者在Excel中用VBA代码轻松实现了学校的要求。
一、试场安排表的设置试场安排表设有“班别”、“人数”、“桌子数”、“试场”、“考生人数”共五列,由于我校是俩学生同坐一张课桌,可以利用四舍五入函数取得桌子数:ROUND (B2/2,0),根据桌子数安排考生人数。
二、贴班级教室表的设置1、思路:分别以随机数和班级为关键字段进行排序,确保每次考生座位随机编排,为了防止前后座位是同班的同学,以人数最多的班级为准先给“贴班级教室”表中的考号赋临时值,按照先排奇数考号再排偶数考号,然后按“考号”字段排序,即可实现同一个班的考生的考号不连续。
最后根据“试场安排表”的顺序给考生赋连续的考号和对应的试场教室。
2、代码:(1)右击工作表标签,在出现的快捷菜单中单击“查看代码”,打开代码设计窗口。
(2)在代码窗口中执行命令“插入/模块”,插入模块1。
(3)录入代码如下:Sub Macro1()Application.ScreenUpdating = FalseDim i As Integer ’定义整型变量用于循环操作Dim j As Integer ’定义整型变量给“贴班级教室”表中的考号赋临时值Dim n As Integer ’定义整型变量给“贴班级教室”表中的考号赋值Dim k As Integer ’定义整型变量定位写入的单元格Dim mj As Integer ’定义整型变量输入人数最多的班级的人数Dim row1 As Integer ’定义整型变量存放“试场安排”表的行数Dim row2 As Integer ’定义整型变量存放“贴班级教室”表的行数Dim y As Integer ’定义整型变量存放“试场安排”表中考生人数Dim c As String ’定义字符串变量存放“试场安排”表中试场教室Dim s As String ’定义字符串变量存放按考号进行排序时的右下角单元格标记’以下代码分别以随机数和班级为关键字段进行排序Sheets(”贴班级教室”).Selectrow2 = Sheets(”贴班级教室”).[a1].CurrentRegion.Rows.Counts = “F” + Trim(Str(row2))Range(”A1”).SelectRange(”A2:” + s).Sort Key1:=Range(”F2”),Order1:=xlAscending,Header:= _xlGuess,OrderCustom:=1,MatchCase:=False,Orientation:=xlTopToBottom,_SortMethod:=xlPinYin,DataOption1:=xlSortNormals = “E” + Trim(Str(row2))Range(”A1”).SelectRange(”A2:” + s).Sort Key1:=Range(”C2”),Order1:=xlAscending,Header:= _xlGuess,OrderCustom:=1,MatchCase:=False,Orientation:=xlTopToBottom,_SortMethod:=xlPinYin,DataOption1:=xlSortNormal’以下代码用于在“贴班级教室”表中给各班级考生的考号赋临时值mj = InputBox(”请输入人数:”,”人数最多的班级”)1、思路:把前面生成的“贴班级教室”表复制两份,分别改名为“贴试场门外”表和“贴试场桌”表,贴试场的桌子的标签要求要有栏头和分割线,首先在“贴试场桌”表第一行插入一空行,再此设计好分割线,然后从第一个考生记录开始在后面插入两个空行,并把第一行的“分割线”和第二行的“栏头”复制到插入的两个空行中,删除最后一行多余的栏头和第一行的“分割线”以便方便排版打印2、代码:(1)右击工作表标签,在出现的快捷菜单中单击“查看代码”,打开代码设计窗口。
巧用Excel VBA 快速编排考场试场
巧用Excel VBA 快速编排考场试场的基本原则考场编排的基本原则是:公平、公正、严肃。
具体来说,要做到以下几点:1.同级各班考生被重新随机排序后基本均匀地散布到各个考场;2.同一考场内同一班的考生前后左右均不相邻;3.考场内座位号按照一定的规律排列,方便考生就座和监考人员管理;4.考场内的座位表和桌贴清晰明了,易于查看和管理。
二、利用Excel VBA编排考场座位的步骤1.准备考场编排数据,包括各班级人数、考场数量等信息;2.创建Excel工作表,将考场编排数据录入其中;3.编写VBA程序,实现考场编排功能;4.运行VBA程序,生成考场座位表、桌贴等。
三、VBA程序实现考场编排的方法1.定义VBA数组,存储考场编排数据;2.利用随机数函数,实现同级各班考生随机排座;3.利用循环语句,实现同一考场内同一班的考生前后左右均不相邻;4.利用Excel的打印功能,生成考场座位表、桌贴等。
四、考场编排的注意事项1.在编排考场时,要考虑各班级人数、考场数量等因素,确保每个考场人数基本均衡;2.在编写VBA程序时,要注意程序的逻辑性和可读性,避免出现错误;3.在生成考场座位表、桌贴等时,要注意格式的美观和清晰,方便考生和监考人员查看和管理。
通过巧用Excel VBA编排考场座位,可以快速、准确地实现考场编排,从而保证考试的公平、公正及其严肃性。
同时,这也是一项非常实用的工作技能,对于学校教育工作者和管理人员来说,具有重要的参考价值。
在中高考中,每个考场一般有30名考生,但实际情况可能会出现考场人数、组数和每组人数各不相同的情况。
因此,在编排考场之前,工作人员需要将考生花名册(必须包含班级信息)录入花名册工作表,将考场基本信息(必须包含考场号、各组人数等)录入考场设置工作表中。
在编排考场时,为了保证考生既随机分布,又均匀分布,程序设计中多次使用了随机编排。
首先是班级内部考生的随机编排。
程序在辅助列G中为学生生成一次随机数,然后按照班级和随机数为关键字段进行排序,实现班级内学生顺序的随机性。
基于VBA的考生座位混排算法
第23卷第3期2009年6月 白城师范学院学报Journal of Ba i cheng Nor m al College Vo l .23,No .3June,2009 基于VBA 的考生座位混排算法张桂杰1a ,郑月锋2,王 月1b(11吉林师范大学1a 1计算机学院;1b 1图书馆;21吉林师范大学博达学院,吉林四平136000) 摘要:使用Office 内嵌的VBA 编程工具,介绍一种适合于有多组、少量考生考试的考号编排算法,实现同组考生的座位穿插排列,有效提高考试质量,可应用于吉林省高校教师岗前培训考务管理系统。
关键词:V BA;排序;Excel中图分类号:TP317.3文献标识码:A 文章编号:167323118(2009)0320026203收稿日期3作者简介张桂杰(———),女,吉林师范大学计算机学院助教,研究方向计算机应用;郑月锋(———),男,吉林师范大学博达学院。
引言高校教师岗前培训是一项长期而重要的职业教育工作。
在培训考试过程中,不同高校的新聘任教师要同时参加相同科目的考试,使同一高校的考生尽可能离得远就成为考号编排中的重要问题。
用Exce l 内嵌VBA 编程工具,开发排序算法实现考生位置穿插,不仅使培训管理工作自动化,而且使上述问题得到了较理想的解决。
1 需求分析及量化指标吉林省按照区域划分了长春、吉林、四平、延边等培训区,分别以01、02、03……为各区代号;各区所辖学校代号以其所在区两位代号为首,后加两位顺序号组成四位学校代号;各校考生考号以其所在学校四位代号为首,后加四位顺序号组成八位考生考号(如图1、2)。
为使同一高校考生之间实现考号穿插排列,笔者编制了考号混编程序。
图1 “信息”工作表 图2 “总表”工作表2 算法思路及流程首先,程序将本次考试分区数、考生总数、学校总数、各校代号、名称、参考人数等记入变量[1]。
然后按照分区,逐次为每个考区考生编制考号,前四位是全省唯一的考区学校代号,后四位是以本区人数为上限的顺序号,作为排考场时的座位号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用VBA编排学生座位表
(2011-09-10 23:10:47)
转载▼
分类:技术交流
标签:
it
在每学年的新生开学前,班主任老师要做大量的准备工作,其中必做的一件事就是收集本班学生的报名信息,编排上课的座位表。
以往班主任老师都是通过手工来编排座位表的,消耗的时间和精力相当大,一旦有学生进行了调整又不得不重复之前的劳动。
下面我们就来看看如何用VBA轻轻松松实现座位表的编排。
通常情况下,编排座位表需要考虑以下三个因素,即学生的视力、身高、性别等,根据学生在报名表中填写的信息,我们采集了相关的数据(如图1)。
利用“控件工具箱”中的“命令按钮”控件在工作表中添加一个命令按钮,修改其“Caption”属性为“排座位”,双击该按钮,在其Click事件中编写下面的代码:
Private Sub CommandButton1_Click()
On Error GoTo err
Dim fenzu As Integer
Dim irow As Integer
Range("D2").Select
'对信息表进行排序,关键字分别为视力、身高、性别
Range("A3:E48").Sort Key1:=Range("E3"), Order1:=xlAscending, Key2:=Range( _ "D3"), Order2:=xlAscending, Key3:=Range("C3"), Order3:=xlAscending
'删除原有的座位表
For Each sh In Worksheets
If = "座位表" Then
Application.DisplayAlerts = False
Sheets("座位表").Delete
End If
Next sh
'添加名为座位表的新工作表
Sheets.Add after:=Sheets("学生信息")
= "座位表"
'获取分组数
fenzu = InputBox("你想把学生分成几个小组?", "提示", 6)
'获取学生总人数
icount = Worksheets(1).[a65536].End(xlUp).Row - 2
'获取每组最多学生人数
irow = Int(icount / fenzu) + 1
'按先行后列的顺序提取学生信息表中的学生名单
For n = 1 To irow
For m = 1 To fenzu
'生成第N组的文字(前面空2行用于显示标题)
Worksheets(2).Cells(3, m) = "第" & m & "组"
Worksheets(2).Cells(n + 3, m) = Worksheets(1).Cells(fenzu * (n - 1) + m + 2, 2) Next m
Next n
MsgBox "座位表编排成功,请根据实际情况手工微调!", vbOKOnly + vbInformation, "提示"
err:
Exit Sub
End Sub
代码说明:
(1)为了使编排的座位表更加合理,我们把视力低的同学尽量往前排,相同视力的同学按身高的高矮顺序排,如果身高又相同则女生排在前面,男生排在后面。
(2)考虑到学生分班后肯定会进行一些调整,所以在生成座位表前首先会检查并删除当前工作簿中原有的“座位表”工作表。
关闭代码窗口返回Excel工作表中,单击“排座位”按钮,系统首先会创建一个名为“座位表”的工作表并询问学生的分组数(默认为“6”组),根据需要输入相应的数字,单击“确定”按钮即可看到分组后的学生名单了,然后根据需要进行适当的微调就可以了。
“讲台”可通过手工插入自选图形来实现,最终的效果如图2所示。
需要说明的是,笔者的座位表是根据自己的编排理念来设计代码的,如果在编排的顺序上要进行调整只需将代码中的三个关键字的字段(视力、身高、性别)顺序以及对应的升序(xlAscending)或降序(xlDescending)关系进行相应的调整就可以了。