Excel——让排课更省心 易礼云 Excel——让排课更省心 I 前言 课程编制是教务处每学期一项令人头疼的工作,复杂而繁琐, 时间紧任务重。其中必须要解决的问题是课程冲突,否则教学工 作无法正常开展。最难解决的问题是课程编排的合理性,因为对 不同学校,不同的教师,对'合理'的定义是不一样的,一个理 想的课程表应该是能满足学校、教师的大部分'合理'要求。排 课时要考虑如下因素:教学资源情况,如有几个微机室?几个音 乐室?一节课同时能容纳几个班上体育课?;学科分布及均衡性, 毕竟还是要讲究科学性的。 以前老师们用原始的方法手工编排:一般是先在电脑上制作 并打印出一张总课表的空表,再打印一张教师工作安排表用来对 照,然后在空白课表上写写画画,期间,还要不断的调整,一支 铅笔涂来擦去。这还不算完,在排好总课表后,还要从总课表中提 取班级课表和教师个人课表,工作量大不说,而且容易出错。排课 的同时还要在旁边统计课程数据,如 1 班的语文排了几节?还差 几节?3 班的数学排了„„,伏案数小时才可收工,费时费力; 现在虽有专业的排课软件,但用软件排课基本不能令人满意:普 遍存在排课条件设置复杂,难以操作等缺点,最重要的是排出的 课合理性差。 若您没有排课软件,又不想回到从前,那么 excel 便是您最 佳的选择。excel 的强大威力来自于它的公式,条件格式和数据有 效性。本人在这方面作了一些尝试,设计了一个简单实用的排课 Excel——让排课更省心 II 模板,用人的思维(手工排课)加上电脑的'监控'(教师、教 室冲突检查),使排课变得更简单、省心,工作量降低不说,效 率大为提高。排好课后,教师个人课表、班级课表就自动生成了, 直接打印出来就可分发给老师和班主任,如果课程还有变动,教 师个人课表和班级课表也会自动跟踪,充分显示出 Excel 的智能 性,现写出来供大家参考。 简要说明:我用的 Excel 版本是 2010 版,读者要看懂这本小 册子,需要具备一些 Excel 的基本知识,并应当了解 Excel 的公式 与函数基础才能跟上我的节奏。为了让读者真正从中受益,我会 在后面的文字中,凡用到公式的地方都会有一些简短的说明,当 然也包括一些 Excel 技巧。就是说,当您看完这本小册子的时候, 不仅仅是在排课方面有收获,我更希望您的 Excel 水平有提高, 这才是我写这些文字的初衷。所有的截图都是用 QQ 聊天软件的 截图功能制作。 我们学校是一所全日制县级初中,原来三个年级分别都有 16 个教学班,虽然现在班级减少了,但我的这个课表仍然没有删除 多出来的班级,如果觉得碍眼,可以将多余的班级隐藏,并不影 响表格的运行。当然如果您所在的学校班级与我这个表差别太多, 也可以将多余的班级删除,不过,删除后公式会作一些调整来适 应新表,才能使表格不发生错误。目前我校的规模是:七年级 14 个班,八年级 13 个班,九年级 15 个班。按我校的惯例及教育局 规定,每周工作 5 天,每天上、下午各 4 节课,但周五的下午只 有 2 节,全周共 38 节课,每周一上午的第一节课全校均为班会 课,本模板的设计不包含早读课及晚自习。 Excel——让排课更省心 III 目录 前言 .............................................................................................. I 目录 ............................................................................................. 3 第 1 章 工作安排 ................................................................. 1 1.1 概述 ................................................................................ 1 1.2 工作安排 ........................................................................ 2 第 2 章 总课表 ..................................................................... 5 1.1 排课区 ............................................................................ 5 1.2 任课教师区 .................................................................... 6 1.3 统计区 ............................................................................ 8 第 3 章 教师课表 ............................................................... 11 3.1 教师个人课表 .............................................................. 11 3.2 制作多个教师个人课表 .............................................. 15 Excel——让排课更省心 IV 第 4 章 班课表 ................................................................... 17 第 5 章 年级课表 ............................................................... 21 第 6 章 教师课表数据 ........................................................ 23 1.1 主文档的制作 ............................................................... 23 1.2 课程名称 ....................................................................... 24 1.3 任课班级 ....................................................................... 26 1.4 邮件合并 ....................................................................... 27 第 7 章 班课表数据............................................................ 31 1.1 课程名称 ....................................................................... 31 1.2 任课教师姓名 ............................................................... 32 附 1:截图目录 ......................................................................... 35 附 2:公式目录 ......................................................................... 37 附 3 EXCEL 常用技巧集 .............................................................. 41 1.3 移动及选定单元格 ....................................................... 41 Excel——让排课更省心 V 1.4 复制和粘贴 .................................................................. 43 1.5 数据录入 ...................................................................... 44 1.6 数据排序 ...................................................................... 45 1.7 表格打印 ...................................................................... 46 1 第1章 工作安排 1.1 概述 我将整个课表制作成一个工作薄文件(xlsx 文件),它包含的 工作表数目由您的需要来定,我这里包含 7 个工作表(图 1-1)。 课表制作好后,删除工作安排里的数据(注意只删除数据,不删 除格式)及总课表里的排课数据,另存为一个模板文件(xltx 文 件),以后就可以在它的基础上导入工作安排,然后再进行人工 排课,其它的就会自动生成,是不是觉得很方便呢? 图 1-1 工作表列表 首先,新建一个 excel 工作薄,默认有 3 个工作表,再插入 4 个表,共 7 张工作表,分别命名为:安排,总课表,教师课表, 班课表、年级课表、教师课表数据及班课表数据(图 1-1)。每个 表的制作及作用,后面会分别进行说明。这样准备工作就算完成 了,下面依顺序进行简要说明。 '安排'表是学校对老师的工作安排,从这个表里可以看出 哪个老师上哪些班的什么课,这是制作这个工作薄的基础,是由 开学前行政会决定的。在它的基础上,我们来制作全校'总课表', 这个靠的是教务人员的智慧,表格只能作一些辅助,比如出现课 Excel——让排课更省心 2 程冲突时用颜色显示(提醒),课程排得合理与否,这个表是关 键。有了'总课表',其它表就是用 Excel 的函数来抽取总课表中 的信息并按要求制作成您希望的格式,比如教师课表、班课表以 及年级课表(因为我们学校班级较多,所以分年级制作课表;您 可视情况而定)。最右边两个表则是为了批量打印而制作的,主 要是利用 Word 的邮件合并功能,在 Word 里将教师课程表和班 级课程表设计好,利用'邮件合并'功能,提取该工作中的数据, 最后合并成一个完全的 Word 文件,便于批量打印;如果您校的 班级少,这两个表就不必制作了,直接在该工作薄的'教师课表' 和'班课表'中一张一张地打印即可。下面就先从第一张表说起。 1.2 工作安排 参照图 1-2 制作表格并输入您校老师的任课情况。 图 1-2'安排'表 第 2 行标注颜色是为了区分不同的年级,715、716 是空白(我 第 1 章 工作安排 3 校今年七年级只有 14 个班,多余的班级编号未删除),您可以不 用理会,当然也可以将其隐藏。为了能一眼就看出哪些老师是跨 年级上课,哪些老师是跨学科任课,需要在 Excel 的'条件格式' 里进行设置,具体方法如下: 选中$B$3:$Q$17,在'开始'选项里,单击'样式'组里的 '条件格式→新建规则',在弹出来的'新建格式规则'对话框 里选择最后一项'使用公式确定要设置格式的单元格',然后输 入公式: =COUNTIF($R$3:$AW$17,B3) 设置好格式后点确定(我设置的单元格格式是'单元格背景 填充,颜色是橙黄色',您可以根据自己的喜好进行设置)。公式 说明:COUNTIF 函数用于条件计数,第一个参数是条件范围,第 二个参数是条件。该公式的第一参数$R$3:$AW$17 是八、九年级 的范围,意思是:在八、九年级范围内,统计七年级范围内的任 课教师姓名,如果不为 0,则表示跨年级任课,应用格式,相应 单元格显示有背景色;如果为 0 则条件不满足,正常显示。 用类似的方法设置跨学科的任课老师,方法是:选中 $B$3:$AW$16,在条件格式的公式里输入如下公式: =COUNTIF($B4:$AW$17,B3) 同样设置好格式后点确定(我设置的单元格格式是'单元格 背景填充,颜色是绿色',您可以根据自己的喜好进行设置)。公 Excel——让排课更省心 4 式说明:该公式的第一参数$B4:$AW$17 是除(数据区)第 1 行 (事实上是表格的第 3 行)外的其它所有行,特别要注意是混合 引用,这样就可以统计出以下各行中是否包含有第 1 行的任课老 师(不同的行,意味着不同的学科,参看第 1 列),如果有,则 表示跨学科任教(跨行就是跨学科),应用条件格式(单元格背 景显示绿色);如果统计结果为 0,则表示不符合条件,单元格正 常显示。这样,这个表格就算完成了,为了使以后的一些统计(如 绩效)更方便,我还在这个表格的其余部分输入了一些公式,当 然这个不是必须的。如我在表格的下面 A20 单元格里输入了一个 统计任课教师数(不重复)的公式 {=SUM(1/COUNTIF(teachers,teachers&''))-1} 这是一个数组公式,公式输完后要按 Ctrl+Shift+Enter 三个键, 其中的花括号是自动生成的,手工输入无效,teachers 是我为这 个表的数据区定义的名称,=$B$3:$AW$17。另外还在 BA2 单元格 里输入公式 =OFFSET($B$3,INT((ROW()-2)/48),MOD(ROW()-2,48)) 将这个公式复制到 BA721 并将其转化成数值(复制→选择性 粘贴→数值),然后在'数据'选项里,单击'数据工具'里的 '删除重复项'工具,留下唯一值,再将 0 值删除,就得到了任 课教师的不重复列表。按上面的方法,也可以分别列出七、八、 九三个年级的任课教师不重复列表。 5 第2章 总课表 本章介绍'总课表'的编制,表格分成三个区:一是排课区 域($A$2:$AX$41),其右侧是任课教师姓名区域($AY$3:$CT$41), 而下边则是统计区($B$42:$AX$59)。排课区用于安排课程,每 当排了一节课,任课教师区就会显示该节课的任课教师(用公式 来设定),这两个区要一一对应,就是说,排课区多大,任课教 师区也是多大,为防止出错,也在该区域上面写上对应的班级。 下面的统计区用于统计各班、各学科已经排了几节课,是否已排 满,或者是否已超过应当安排的节数,总课时是否已超出等,下 面分别说明。 2.1 排课区 如图 2-1,横向为班级,第 1 列为星期,第 2 列为节次,中 间为人工排的课。 图 2-1 总课表 Excel——让排课更省心 6 为方便排课,可以应用 Excel 的数据有效性,将排课区的数 据作一些限定,方法如下: 选定整个排课的数据区($A$3:$AX$41),在'数据'选项里, 单击'数据工具'的'数据有效性',选择'数据有效性',在弹 出的'数据有效性'对话框里,'允许'下选择'序列','来源' 里输入'=语文,数学,英语,思品,历史,地理,生物,物理,化学,体育,音 乐,美术,阳光,信息,英活'①,然后单击确定完成设置。这样,当 你在排课的时候就多了一种选择:既可以直接从键盘敲入,又可 以用下拉选单选择输入,如下图所示。 图 2-2 下拉选单输入 2.2 任课教师区 紧邻排课区的右侧对应位置,设计任课教师姓名区。设计思 ①本栏里输入您校实际课程。 第 2 章 总课表 7 路是:当左侧排课区的某节课排定后,通过公式在右侧显示出该 堂课的任课老师姓名,这个区域设计的目的是为防止课程冲突作 准备。如 AY3 单元格的公式如下: =IFERROR(VLOOKUP(C3,arrangement,COLUMN()-49,0),'') 这是一个函数嵌套公式,它由三个函数构成,其中,IFERROR (函数,''),意思是当括号内的函数值出现错误时,显示为'空'; 不出现错误时,显示函数本身的结果。其作用是避免当函数出现 错误时显示错符号。第二个函数 VLOOKUP 用于查找,在 arrangement 里查找 C3(课程名称)的值(在这里是'班会'), 找到后,显示查找区域里第 column()-49 列的值(在这里就是班 会课的任课教师姓名)。函数 column()用于显示活动单元格的列数, 参数为空,column()-49②的值要与 Arrangement 区域的值对应。 Arrangement 是一名称,它代表安排表里的数据区,即:=安 排!$A$2:$AW$19。当然你也可以不用名称,而直接用数据区域来 代入,效果是一样的,用名称的目的是简化公式,让公式看起来 既具有可读性,又显得简洁。 有了任课教师姓名区,现在回过头来设计课程冲突颜色显示。 选中排课区,即$C$3:$AX$41,在条件格式的'公式'里输入如 下公式并设置颜色(我这里设定的是红色字体): ② 这里之所以是减 49,是根据表的结构决定的,如果您的表的行列数 与这里的表不一样,就要调整这个数的值来适应您的表。 Excel——让排课更省心 8 =COUNTIF($AY3:$CT3,AY3)>1 注意单元格的引用是混合引用。 设计思路:一个老师在同一天同一节课,只能上一个班的课, 如果同一天同一节课安排了某个老师超过 1 节课的情况出现,就 将该课程用红色显示出来提示排课者,这样,排课老师马上就可 以发现问题,以便及时纠正。从'总课表'看出,同一天同一节 课,其实就对应'总课表'的一行,所以上面公式里第一个参数 用的是行相对引用,第二个参数要用相对引用。该公式的意思是: 在任课教师姓名区$AY3:$CT3 中统计 AY3 单元格中老师是否重复 (结果>1 就是重复),如果是就用颜色显示,如果否就正常显示。 2.3 统计区 统计区($B$42:$AX$59)是用来统计已排节数的区域,如图 2.3,左侧的学科由'安排'表复制而来,上面的班级与本表第 2 行的班级对应。在 C43 单元格输入公式 =COUNTIF(C$3:C$41,$B43) 这个公式统计 701 班(七年级 1 班)全周'语文'课($B43 单元格的值)的已排节数,注意是混合引用。将该公式复制到 C43:AX58,统计区的设计就算完成。当然您还可以进一步优化这 个表,比如,用条件格式将不等于规定节数的单元格用颜色显示 出来,这里就不多说了。 第 2 章 总课表 9 图 2-3 统计区部分截图 至此,整个'总课表'的编辑就结束了。 11 第3章 教师课表 3.1 教师个人课表 当'总课表'设计完成,并且课程已排好,那么本章介绍的 '教师课表'便是将'总课表'的数据抽取出来,按照个人喜欢 的形式制作成单个课程表,如图图 3-1。 图 3-1 教师个人课表 Excel——让排课更省心 12 这个表共有 11 行,7 列,其中,第 1 行为标题,第 2 行为教 师姓名及日期,第 3 至第 11 行为课程表主体,每节课既显示课 程名称,也显示班级名称。在 B4 单元格里输入公式: =IFERROR(INDEX(总课表!$C3:$AX3,MATCH($B$2,总课 表!$AY3:$CT3,0))&CHAR(10)&HLOOKUP($B$2,总课 表!$AY3:$CT$42,44-ROW(),0),'') 公式说明:第一个函数 IFERROR(函数,''),前面已经说过,用 来将函数出错时,不显示错误而显示空白;公式其余部分被分成 两个部分,以 CHAR(10)①为分界点,前面部分用来显示课程名称, 后面部分用来显示班级名称。第二个函数 INDEX(范围②,列数) 用来搜索出由第 2 参数'列数'确定的课程名称。第三函数 MATCH($B$2③,总课表!$AY3:$CT3④,0)用来匹配$B$2 单元格里的那 个教师,在'总课表'任课教师区的第 1 行里排在第几列?这个 值也就是前面 INDEX(范围,列数)函数的第 2 个参数。 ① 该函数为一回车符,需要将该单元格格式设置为'自动换行'。 ②范围:总课表!$C3:$AX3,即'总课表'排课区的第 1 行,也就是星期 一的第一节课,正好与'教师课表'星期一的第一节课对应。 ③ 为教师姓名单元格,为绝对引用。 ④总课表!$AY3:$CT3 为'总课表'的任课教师姓名区的第 1 行,与排课 区的第 1 行对应。 第 3 章 教师课表 13 再来看第二部分是如何显示出班级名称来的。 函数 HLOOKUP($B$2,范围⑤,行数,0),用来在'总课表'的任 课教师区查找该教师($B$2 单元格确定的教师),并由第 3 参数 '行数⑥'来确定最终显示的值,这个值就是'总课表'第 42 行 显示的班级数值。第 4 个参数 0,说明是精确查找,否则为模糊 查找。 现将 B4 单元格里的公式复制到 B11,那么星期一的课程表就 制作好了;依据同样的原理制作其他星期的课程,现在列出星期 二第 1 节课(C4 单元格)的公式: =IFERROR(INDEX(总课表!$C11:$AX11,MATCH($B$2,总课 表!$AY11:$CT11,0))&CHAR(10)&HLOOKUP($B$2,总课 表!$AY11:$CT$42,36-ROW(),0),'') 看起来好像还是那么复杂,其实只要第 1 个公式琢磨透了, 这个公式就是一样的了,也不必重新输入,那该怎样操作呢?方 法是:将 B11 单元格里的公式复制到 B12,选中 B12 单元格,将 公式编辑栏里的内容复制并粘贴到 C4 单元格并稍作修改⑦即成。 ⑤ 此处的范围指:总课表!$AY3:$CT$42,对照 Excel 的课程表来看,此 范围其实就是'总课表'任课教师区。 ⑥ 此'行数'为:44-ROW(),看得出,越往下,该值递减。 ⑦ 修改的部分仅限于该公式的最后部分,将原来的 44-row(),修改为 Excel——让排课更省心 14 同样的道理可列出星期三第 1 节课(D4 单元格)的公式: =IFERROR(INDEX(总课表!$C19:$AX19,MATCH($B$2,总课 表!$AY19:$CT19,0))&CHAR(10)&HLOOKUP($B$2,总课 表!$AY19:$CT$42,28-ROW(),0),'') 需修改的部分参照上面。星期四第 1 节课(E4 单元格)的公 式: =IFERROR(INDEX(总课表!$C27:$AX27,MATCH($B$2,总课 表!$AY27:$CT27,0))&CHAR(10)&HLOOKUP($B$2,总课 表!$AY27:$CT$42,20-ROW(),0),'') 星期五第 1 节课(F4 单元格)的公式: =IFERROR(INDEX(总课表!$C35:$AX35,MATCH($B$2,总课 表!$AY35:$CT35,0))&CHAR(10)&HLOOKUP($B$2,总课 表!$AY35:$CT$42,12-ROW(),0),'') 由此看出,只要搞清楚了原理,这个表的制作也不是太难, 关键是第 1 个公式,其它的只需复制并稍作修改即可。 这样,这个表就算完成了,最后就是进行页面设置,使它能 36-row(),就可以了,是不是很简单呢? 第 3 章 教师课表 15 够在一张 A4 纸(当然也可以是 B5 纸)上完全显示。有了这个表, 只要在$B$2 单元格里输入教师姓名,那么他的全周课程就全部显 示出来,直接打印出来发给该教师就行了,缺点是打印完一位老 师,就要在$B$2 单元格里重新输入另一个老师的姓名,才能打印 第二位老师的课程表。如果您校教师人数不多,这样也不是太麻 烦;如果像我们学校一样,有一百多老师,那效率就太低了,我 们暂且将这个问题搁置,后面有办法解决它。 3.2 制作多个教师个人课表 为了调课的方便,以这个表为基础,再制作两个一样的表, 但由于位置变了,所以公式也需要作一些改变,不过,有了第一 个表作基础,这两个表中的公式可以如法炮制出来。具体方法是: 先复制第一个表,将它粘贴到右侧适当位置,然后将公式中的 $B$2 替换成$J$2⑧就可以了,还有一点不同的是,为了方便调课, 在该表中设计了一个电话号码,以便需要调课的老师协商,也就 是在$L$2 单元格输入了如下公式: =IFERROR(VLOOKUP($J$2,电话,2,0),'') 公式中的'电话'为一名称,其实就是'电话列表'区域, 如果没有查找到该教师的电话,则显示为'空',避免出现错误 ⑧ $J$2 为该表教师姓名所在的单元格。 Excel——让排课更省心 16 符号。这个公式虽然简单,但用处很大,还希望您能够逐渐熟悉 它。 用同样的方法再制作出一个'教师个人课表'来,然后还需 要制作出一个班级课表并放在适当地方,这个表的制作方法稍后 说明。其实只要有第一个表就行了,后面的三个表都不是必须, 嫌麻烦的话,可以不做,一个表足够了。 17 第4章 班课表 这张表是要打印出来贴在班上的,同样是从'总课表'中通 过公式将数据抽取出来,填在您制作好的班级课程表中,它大致 应该长成图 4-1 的样子 图 4-1 班级课表 先将页面按 A4 或 B5 纸张设置好(因为最后是要打印出来的), Excel——让排课更省心 18 然后将表格的骨架做出来,最后来写公式。 这个表的班级选择在$H$1,可以手工直接在该单元格中输入 班级,如果不喜欢这样,那就设置条件格式,然后用鼠标来选择。 具体方法是:先将'安排'表中的$B$2:$AW$2 区域定义为名称 (我这里叫),然后在数据有效性设置的'允许'下选'序列', 在'来源'后填入:=classes。 $B$2 单元格用来显示班级名称,公式如下: =HLOOKUP($H$1,安排!A2:$AW$19,18,0) 这个公式前面遇到过,就不多解释了。 $C$2 单元格显示该班班主任姓名,公式如下: =HLOOKUP($H$1,arrangement,17,0) 这个公式与$B$2 单元格里的公式基本相同,只是这里不是单 元格引用,而是用了名称,arrangement=安排!$A$2:$AW$19,其 它就没什么了。 下面来看星期一第 1 节课(单元格 B4)的公式: =HLOOKUP($H$1,排课,ROW()-2+8*(COLUMN()-2),0)&CHAR(10) &CHAR(10)&HLOOKUP($H$1,任课教师, ROW()-2+8*(COLUMN()-2),0) 第 4 章 班课表 19 这公式看起来比较长,也比较复杂一点,粗一看可能会把您 吓跑,但仔细研究一下也没出现新函数,都是之前见过的,由于 公式嵌套会使得您望而生畏。如果搞清楚公式中的每个函数以及 它的参数特点,就不难理解了。下面作一些说明: 先说两个名称,一是:排课=总课表!$C$2:$AX$42,其实就是 '总课表'的排课区;二是:任课教师=总课表!$AY$2:$CT$40, 它是'总课表'的任课教师区。整个公式由两部分构成,以 CHAR(10)①函数为分界点,第一部分显示课程名称,由 HLOOKUP($H$1,排课,ROW()-2+8*(COLUMN()-2),0)决定;第二部分 显示该课程任课教师,由 HLOOKUP($H$1,任课教师, ROW()-2+8*(COLUMN()-2),0)决定。如果像这样将这个长公式分解 为两部分,是不是就将公式变短了呢? 第一部分思路是,用 HLOOKUP 函数,在'排课'区域去查 找班级名称($H$1 单元格所代表的值),找到后,返回该区域的 第 ROW()②-2+8*(COLUMN()③-2)④行对应值,这便是该节课的课程 ① CHAR(10)函数其实是一个换行符,用两个这样的函数,是为了让行间 距大一些,用一个也可以。 ② 返回该单元格(B4)的行数。 ③ 返回该单元格(B4)的列数。 ④ 整个 ROW()-2+8*(COLUMN()-2 的值是凑出来的。当然,规律也是有的。 比如 8*(COLUMN()-2,为什么是这个样子的呢?去看看'总课表'的排课区 就知道了,原来每隔 8 行(即 8 节课)就是一个轮回,因此,当星期二的第 Excel——让排课更省心 20 名称了。 第二部分跟第一部分是完全类似的,自己试着去理解一下吧。 中间用两个 CHAR(10)函数连接起来,构成两行,同时两行还有间 隔,这样看起来是不是要美观点呢。有了这个公式后,只需要将 复制到全表就行了,复制后不作任何修改,这个表就基本完成了。 为了让班级课表更完善,我绘制了三个较宽的矩形,并分别 输入文字,用来提示'课间操'、'午餐'和'眼保健操',适当 调整三个矩形框的尺寸,使可使得矩形框与整个课表比较协调。 由于矩形框要占据一定的位置,所以它所占据的那一行的高度要 调整得高些,作一些格式上的修饰,使表看起来更协调就可以了。 可能有人会问,为什么要用矩形框而不让它单独占一行?也 不是不可以,我之前就是这么做的,但是,带来的据点是:它下 面一行的公式要作修正,个人觉得麻烦,于是就上了这样的手段, 好处很明显:只需一个公式,然后复制就完成,完全不需调整。 懂得这个表的制作原理,那么先前在'教师课表'那一章里 留下的悬念,自然也就明白了。 1 节课来临时,就已经过去 8 行了。 21 第5章 年级课表 我校班级较多,所谓'总课表'其实是分年级打印的,所以 才有这样的名称。如果学校规模不大,也可以将三个年级的课表 制作在一张 A4 纸上,从而设计出真正的总课表来。 年级课表分年级制作成三个表,如果打印的话,就是三页, 每个年级一占页,三个表的结构完全一样,但公式是有区别的, 因为每个表所处的行的位置不一样,但都可以用同样的原理去理 解,一旦理解了,再来分析公式就不难了。现在,先将年级课表 的样子做出来,然后写出第一个公式,也就是 B4 单元格(七年 级 1 班星期一第 1 节课)里的公式: =HLOOKUP(C$3,排课,ROW()-2+8*INT((COLUMN()-3)/16),0) 如果表格横向放得下的话(我这里放不下,将星期四和星期 五两天的课折行显示),直接将这个公式复制到整个年级就完成 了,但是,由于星期四和星期五的课表提到了下面去显示,使得 公式到这里后要作一些调整。调整后 C14 单元格(星期四第 1 节 课)里的公式就变成如下的形式: =HLOOKUP(C$3,排课,ROW()+12+8*INT((COLUMN()-3)/16),0) 自己去理解一下应该没有问题,将这个公式复制到星期四和 星期五就行了。 Excel——让排课更省心 22 依据同样的原理就可把八、九年级的课表制作出来。我这里 仅提供几个公式。C25 单元格(八年级 1 班星期一第 1 节课)的 公式如下: =HLOOKUP(C$24,排课,ROW()-23+8*INT((COLUMN()-3)/16),0) C35 单元格(八年级 1 班星期四第 1 节课)的公式如下: =HLOOKUP(C$34,排课,ROW()-9+8*INT((COLUMN()-3)/16),0) C46 单元格(九年级 1 班星期一第 1 节课)的公式如下: =HLOOKUP(C$45,排课,ROW()-44+8*INT((COLUMN()-3)/16),0) C56 单元格(九年级 1 班星期四第 1 节课)的公式如下: =HLOOKUP(C$55,排课,ROW()-30+8*INT((COLUMN()-3)/16),0) 这样,年级课表也制作好了,这个是要打印来发给年级组长, 同时也送交学校领导。 23 第6章 教师课表数据 前面已经说过,当您校班级较多时,用'教师课表'一张一 张地打印来发给任课教师是比较麻烦的,因为每打印一张课表, 就要重新输入一次教师姓名,为解决这个问题,我想到了 Word 的邮件合并功能。 6.1 主文档的制作 新建一个 Word 文件,保存为'教师课表',在这个文件里, 先设计出课表的样子,如图 6-1 图 6-1 Word 邮件合并主文档 Excel——让排课更省心 24 6.2 课程名称 回到'教师课表数据'工作表来,这个表的第 1 列是所有任 课教师姓名(不重复),这个名单列表来自'安排'表,参考第 2 页的第 1 章 1.2 节末尾部分,这份名单是按学科排列的;您也 可以按年级来排列,那就得分别列出七、八、九年级的任课教师 名单列表,然后再将这三个列表连接起来形成一个全校教师列表; 当然,得到教师列表后,再来按拼音排序也是可以的,就看您喜 欢了,目的是将来打印出来后按什么顺序发放比较方便,您就按 什么顺序来排列这份名单。 再来看第 1 行,它由两部分构成,从 B 列到 AM 列列出了全 周 38 节课的标题(如周一 1 表示星期一第 1 节课„„),后面部 分 AN 列到 BY 列,也列出了全周 38 节课的班级名称标题。最好 没把您搞晕,也就是说,前面部分用来存放课程名称,后面部分 用来存放是哪个班。下面来说公式,整个表比较大,公式也比较 复杂,但再复杂也不过只有两个公式而已,剩下的工作就是复制 这两个公式。先来看 B2 单元格里的公式: =IFERROR(INDEX(INDIRECT('总课 表!$C'&COLUMN()+1&':$Ax'&COLUMN()+1),MATCH($A2,INDIRECT( '总课表!$ay'&COLUMN()+1&':$ct'&COLUMN()+1),0)),'') 看出来了哈,的确很复杂。先把第 1 层外套剥离,将公式变 短,也就是去掉 IFERROR(余下的公式,''),因为这个部分前面已经 说过了,它的作用无非是当公式出现错误的时候,不将错误符号 第 6 章 教师课表数据 25 显示出来(从而使该单元格显示空白),不出错的时候,就显示 '余下的公式'的内容。接着我们来看'余下的公式'如何运作。 '余下的公式'的主体是 index 函数,您肯定应该先搞清楚 这个函数的参数,无非就三个参数,从左至右依次是:搜索数据 的区域(或范围)、显示区域的第几行、显示区域的第几列。在 这里省去了行数,那就只有两个参数了,前面部分为搜索范围, 后面部分为列数,按这个思路去理解这个公式。这里又多出一个 函数 INDIRECT 来,它的作用是将它括号内的参数变成'引用'。 这个公式的思路是:在'总课表'的排课区的第 1 行('总课 表!$C3:$Ax3')去搜索课程名称,究竟是这一行的哪一列,由第 2 个参数决定;张 2 个参数公式的范围与第 1 个参数的范围有点类 似,可以参照来看。第 2 个参数的意思是在'总课表'的'任课 教师'区(即'总课表!$ay3:$ct3')中来匹配第 1 列中的教师姓名 (如郑霞霞),看看这个教师在'任课教师'区中的第 1 行的位 置,用这个位置数来确定第 1 个参数所确定范围的具体位置;如 果这一行里没有找到第 1 列中的那个教师,那就显示空白。 图 6-2 '教师课表数据'的课程名称截图 Excel——让排课更省心 26 下面先试图理解第 1 部分(搜索范围),从公式看出,该区 域内的函数为 COLUMN(),说明这个范围只与列有关,因为不同 的列,就意味着不同的节次。这个公式在往下复制的时候,第 1 个参数不会变,但在往右复制的时候,由于 COLUMN()的值会变, 所以引用的区域就会跟着变,从而区分出不同的节次所搜索的范 围来。 公式的第 2 部分用了 MATCH 函数,它有三个参数,分别是 匹配的值$A2,匹配的范围 INDIRECT('总课 表!$ay'&COLUMN()+1&':$ct'&COLUMN()+1)和精确匹配(0 值), 如果理解了第 1 部分的范围,这个范围是一样的,只是区域不同 而已,第 1 部分引用了排课区,第 2 部分的范围引用了任课教师 区,如此而已。 6.3 任课班级 接下来看看 AN2 单元格的公式,它的作用是:当第 1 列第一 位教师周一第 1 节有课时,显示是哪个班的课(即显示班级名称), 如果没有课,则显示为空,用的是 HLOOKUP 函数,前面有过介 绍,这里略过。 第 6 章 教师课表数据 27 图 6-3 '老师课表数据'的班级名称截图 因为这个表太大(宽度是 77 列:全周课程节数 38×2;高度 是 163 行:我校任课教师人数),所以截图分成了两部分,理解 公式时参考这两个截图。 6.4 邮件合并 好了,表格制作完了,将其保存好并关闭。下面该说说'邮 件合并'的事儿了。还记得本章一开头制作的那个主文档吗?参 看第 23 页图 6-1,下面的工作就是要把刚才制作好的'邮件合并 数据'里的内容插入到主文档的表格中,具体方法是①: 返回到主文档的界面,选择'邮件'标签,在'开始邮件合 并'栏目里单击'开始邮件合并'的'信函',接着再单击'选 择收件人'中的'使用现有列表',在弹出的对话框中找到'课 表'工作簿,单击'打开',再点'确定',再在弹出的'选择表 ① 下面的操作均是在 Word 中进行。 Excel——让排课更省心 28 格'对话框中点击'教师课表数据'后点'确定',这样就将该 主文档与 Excel 工作簿(课表)联系起来了。接下来的工作虽比 较繁琐,却是必须,而且没有捷径,硬着头皮点吧。 先将光标放在'教师:'后面,然后单击'插入合并域',选 择'教师'(这样就把 Excel 工作簿中第 1 行名称为'教师'的那 列数据插入到此);再将光标移至星期一第 1 节课的位置,单击 '插入合并域',选择'周一 1'(这样就把 Excel 工作簿中第 1 行名称为'周一 1'的那列数据插入到此);按驾车换一行,继续 点击'插入合并域',选择'M1'(这样就把 Excel 工作簿中第 1 行名称为'M1'的那列数据插入到此)„„依此类推,将主文档 课程表的每一个格子填满,插入合并域的时候需要注意:周一 1 要与 M1 对应,同样周三 4 要与 W4 对应,否则最后制作出的课 程表会出错。完成后看到的样子应该与图 6-4 相似。 图 6-4 已经将数据插入到主文档后的课表 第 6 章 教师课表数据 29 这一步完了,就可以看看成果了,点击'预览结果',主文 档课程表立即就变了样,成了具体的老师和具体的班级了。您还 可以继续点'下一条'来预览第 2 位老师的课程,觉得基本上没 错了,就可以点击'完成并合并'下的'编辑单个文档',再点 '确定',现在只看见屏幕闪烁,只需一会儿功夫,162(我校教 师人数)页的文档就出现了,这个文档中的每一页,对应一位教 师的课程表,将其保存起来,随时可以打印。这期间如果课程有 变动,即 Excel 工作簿作了调整,那么,当您再次打开主文档(注 意是主文档,不是刚才保存的那份文档!)时,会出现图 6-5 所 示的提示: 图 6-5 更新提示 点击'是'按钮(更新数据)后,新的数据就会出现在该主 文档中,这个时候再点'完成并合并'下的'编辑单个文档', 再点'确定',又产生一份新的文档,将文档打印出来便是更改 后的教师课表了。 特别说明:邮件合并产生的新文档是分节的,也就是说,每 Excel——让排课更省心 30 一页其实是一节②,如果您不是要打印全部文档,比如您只想打 印第 5 位教师的课表,那么您就应该在'打印'对话框的'页数' 那一栏输入's5'③而不是直接输入 5。如果您不喜欢这样,也有 办法,那就是用'查找-替换'功能,将'节'的符号全部替换为 '空',即将'节'删除,就变成普通的页面了④。 ② 您可以从左下角的状态栏看出。 ③ 这里的 s 就是英语'section(节)'打头的字母。 ④ 这样,整篇文档只有 1 节 31 第7章 班课表数据 这一章的功能与前一章相似,思路相同,不同之处是,前一 章是通过'邮件合并'功能,批量打印'教师课表',而本章也 是通过'邮件合并'功能,批量打印'班课表'。所以本章的介 绍可能比较简略。 7.1 课程名称 同样,先来说说'班课表数据'这个表格,它包含第 1 列(班 级名称①)和第 1 行,第 1 行由两部分构成,从 E 列到 AP 列列出 了全周 38 节课的标题,后面部分 AQ 列到 CB 列,列出了全周 38 节课的任课教师名称标题。也就是说,前面部分用来存放课程名 称,后面部分用来存放是哪个老师上的那节课。下面来说公式, 整个表比较大,公式却不复杂。先来看 D2 单元格里的公式: =HLOOKUP($A2,arrangement,17,0) 这公式简单哦,HLOOKUP 函数的第 2 参数用了名称而不是范 围引用,其它没什么可解释的。这一列用来将各班班主任姓名列 ① 其实我校现在只有 42 个班,但我保留了几个空白班级名称,所以, 总共有 48 个班级名称。 Excel——让排课更省心 32 出,再来看 E2 单元格的公式: =OFFSET(总课表!$C$2,COLUMN()-4,ROW()-2,) 这个公式用到一个新函数 offset,它是将'总课表'的$C$2 按'行'和'列'进行移位而得。 7.2 任课教师姓名 同样 AQ2 单元格的公式具有类似的样子: =OFFSET(总课表!$AY$2,COLUMN()-42,ROW()-2,) 它是将'总课表'的$AY$2 按'行'和'列'进行移位而得。 前一公式得到课程名称,后一公式得到该课程的任课教师,最后 复制这两个公式即完成全表制作。 后面的'邮件合并'与前一章类似,先制作出一个主文档, 如图 7-1 所示。 第 7 章 班课表数据 33 图 7-1 班级课表主文档 然后在'邮件'标签中,点击'开始邮件合并'的'信函', 接着再单击'选择收件人'中的'使用现有列表',在弹出的对 话框中找到'课表'工作簿,单击'打开',再点'确定',再在 弹出的'选择表格'对话框中点击'班课表数据'后点'确定', 这样就将该主文档与 Excel 工作簿(课表)联系起来了。接下来 的工作 便与前一章相同,不厌其烦地点击'插入合并域',直至 完成,完成后的班课表应该跟图 7-2 差不多。 Excel——让排课更省心 34 图 7-2 合并后的班级课表主文档 后面的操作就不再多说了,最后完成合并,并编辑新文档, 确定后,就得到了一个 42 页②的新文档,将其保存,以后可以随 时调出并打印。 至此,全部工作簿编辑完毕。 ② 对应 42 个班 附 1 截图目录 35 附1 截图目录 图 1-1 工作表列表 1 图 1-2'安排'表 2 图 2-1 总课表 5 图 2-2 下拉选单输入 6 图 2-3 统计区部分截图 9 图 3-1 教师个人课表 11 图 4-1 班级课表 17 图 6-1 Word 邮件合并主文档 23 图 6-2 '教师课表数据'的课程名称截图 25 图 6-3 '老师课表数据'的班级名称截图 27 图 6-4 已经将数据插入到主文档后的课表 28 图 6-5 29 Excel——让排课更省心 36 图 7-1 班级课表主文档 33 图 7-2 合并后的班级课表主文档 34 附 2 公式目录 37 附2 公式目录 =COUNTIF($R$3:$AW$17,B3) ....................................................... 3 =COUNTIF($B4:$AW$17,B3) ......................................................... 3 {=SUM(1/COUNTIF(TEACHERS,TEACHERS&''))-1} ........................ 4 =OFFSET($B$3,INT((ROW()-2)/48),MOD(ROW()-2,48)) ................. 4 =IFERROR(VLOOKUP(C3,ARRANGEMENT,COLUMN()-49,0),'')...... 7 =COUNTIF($AY3:$CT3,AY3)>1 ....................................................... 8 =COUNTIF(C$3:C$41,$B43) ........................................................... 8 =IFERROR(INDEX(总课表!$C3:$AX3,MATCH($B$2,总课 表!$AY3:$CT3,0))&CHAR(10)&HLOOKUP($B$2,总课 表!$AY3:$CT$42,44-ROW(),0),'') ....................................................... 12 =IFERROR(INDEX(总课表!$C11:$AX11,MATCH($B$2,总课 表!$AY11:$CT11,0))&CHAR(10)&HLOOKUP($B$2,总课 表!$AY11:$CT$42,36-ROW(),0),'') ..................................................... 13 =IFERROR(INDEX(总课表!$C19:$AX19,MATCH($B$2,总课 Excel——让排课更省心 38 表!$AY19:$CT19,0))&CHAR(10)&HLOOKUP($B$2,总课 表!$AY19:$CT$42,28-ROW(),0),'') ..................................................... 14 =IFERROR(INDEX(总课表!$C27:$AX27,MATCH($B$2,总课 表!$AY27:$CT27,0))&CHAR(10)&HLOOKUP($B$2,总课 表!$AY27:$CT$42,20-ROW(),0),'') ..................................................... 14 =IFERROR(INDEX(总课表!$C35:$AX35,MATCH($B$2,总课 表!$AY35:$CT35,0))&CHAR(10)&HLOOKUP($B$2,总课 表!$AY35:$CT$42,12-ROW(),0),'') ..................................................... 14 =IFERROR(VLOOKUP($J$2,电话,2,0),'')...................................... 15 =HLOOKUP($H$1,安排!A2:$AW$19,18,0) ................................... 18 =HLOOKUP($H$1,ARRANGEMENT,17,0) ..................................... 18 =HLOOKUP($H$1,排课,ROW()-2+8*(COLUMN()-2),0)&CHAR(10) &CHAR(10)&HLOOKUP($H$1,任课教师, ROW()-2+8*(COLUMN()-2),0) .......................................................................................................... 18 =HLOOKUP(C$3,排课,ROW()-2+8*INT((COLUMN()-3)/16),0) ...... 21 =HLOOKUP(C$3,排课,ROW()+12+8*INT((COLUMN()-3)/16),0) ... 21 =HLOOKUP(C$24,排课,ROW()-23+8*INT((COLUMN()-3)/16),0) .. 22 附 2 公式目录 39 =HLOOKUP(C$34,排课,ROW()-9+8*INT((COLUMN()-3)/16),0) .... 22 =HLOOKUP(C$45,排课,ROW()-44+8*INT((COLUMN()-3)/16),0) .. 22 =HLOOKUP(C$55,排课,ROW()-30+8*INT((COLUMN()-3)/16),0) .. 22 =IFERROR(INDEX(INDIRECT('总课 表!$C'&COLUMN()+1&':$AX'&COLUMN()+1),MATCH($A2,INDIRECT(' 总课表!$AY'&COLUMN()+1&':$CT'&COLUMN()+1),0)),'') ............... 24 =HLOOKUP($A2,ARRANGEMENT,17,0) ....................................... 31 =OFFSET(总课表!$C$2,COLUMN()-4,ROW()-2,) .......................... 32 =OFFSET(总课表!$AY$2,COLUMN()-42,ROW()-2,) ...................... 32 附 3 Excel 常用技巧集 41 附3 Excel 常用技巧集 A. 移动及选定单元格 我们在操作 Excel 工作表的时候,经常会定位活动单元格, 或将活动单元格移动到想去的地方,以便输入数据或公式。好像 移动单元格的操作有点太简单而不值得说?非也。如果您掌握了 一些技巧,会大大提高您的效率。 先来说最简单或最容易理解的方法:直接在键盘上移动四个 方向键①;或直接用鼠标点击您想去的单元格;再就是单击'名 称框'(编辑栏的左侧)后输入您想去的单元格(或区域)后回 车,就可定位到您的目的单元格了②。 如果您是在已经输入了数据的矩形区域中③,这时移动单元 ① 按一次,移动一格;按住不松手,它会一直移动,直到你松手或已到 表格尽头为止。 ② 此方法也可以输入单元格区域。 ③ 要求数据区域没有空白,也就是说,每个单元格必须要有数据,不能 为空。 Excel——让排课更省心 42 格就太方便了,快捷键是: Ctrl+方向键(英语输入状态下) 可以迅速回到数据区域的四个边线上而不管数据区有多大。 如果在以上操作的基础上,再配合 Shift 键,那么快速移动就变成 了快速选择④,这个组合键真是太神奇了,请千万记住并熟练应 用: Ctrl+Shift+方向键 强烈建议用键盘操作而非鼠标,包括您在操作其它应用程序 或 Windows 的时候!也许您已经找到规律了:单独按方向键的时 候,移动单元格是比较慢的;如果加一个 Ctrl 键,速度一下就提 起来了;如果再加上 Shift 键,原来的移动就变成了边移动边选择。 顺便提一下,当您的数据区域比较大的时候,以下几个快捷键肯 定是有用的: Home:回到该行行首 Ctrl+Home:回到 A1单元格 ④ 指从当前单元格一直选取到数据区的末尾,具体选取的是哪个区域, 得由您按的是方向键的上、下、左、右来决定。 B 复制和粘贴 43 Ctrl+end:回到数据数据区的右下角 Page up:往上翻一屏 Page down:往下翻一屏 Alt+page up:往左翻一屏 Alt+page down:往右翻一屏 B. 复制和粘贴 复制和粘贴有值得说的吗?无论是数据,还是公式,不过就 是先单击要复制的单元格(或区域),点击'复制',然后再单击 目标单元格后点'粘贴'吗?对的,还可以用 ctrl+C 和 Ctrl+V 快 捷键,再就是用鼠标操作:选择要复制的单元格,将鼠标移到该 单元格右下角并呈现实心'+'符号时,往下拖动(或往右拖动)。 以上都是正确的方法,也经常被大家所采用。我这里要说的 是另一种快捷键,当想将数据(或公式)往右边复制时,只需选 中该单元格和右边的目标单元格(区域)后按: Ctrl+R:往右复制(R:right) 如果想将数据(或公式)往下复制时,只需选中该单元格和 Excel——让排课更省心 44 下面的目标单元格(区域)后按: Ctrl+D:往下复制(D:Down) C. 数据录入 数据录入时,需要说明的是,搞清楚数据类型,尤其是貌似 是数值,但却是文本的那一类,比如电话号码、身份证号等,输 入这类文本型数据时,先要将单元格格式设置成'文本',然后 再输入,或者在输入时,先在英文状态下按'''号(该符号不会 显示)后再输入。如果在未设置格式的情况下,已经输入了如身 份证号码(18 位),那么该单元格就会将该号码的后三位显示为 '0'⑤,此时,如果您再将该单元格格式设置为'文本',excel 也无回天之力,解决的办法只有重新输入。默认情况下可以通过 单元格的对齐方式来识别数据类型:数值左对齐,文本右对齐。 另外,除了在'选项→高级'的'按 Enter 键后移动所选内 容'的'方向'里选择向下或向右,满足您自己的喜好外,要想 提高输入速度,还可以采用以下办法:先选定输入范围,然后再 输入,每输完一个单元格按一次'Tab'键。 ⑤ 这是因为该单元格将其识别为数值了,而每个单元格最多只能存储 15 位数据,多出的部分以 0 代替。 D 数据排序 45 有效性设置也可帮助您在输入时出错,如:限定学生成绩的 输入范围为 0-100 分,可在'数据有效性'设置中,将允许值设 为整数,输入最大值和最小值后'确定',这样,当您输入的数 值不在这个范围中的时候,excel 就会停止并提醒您。又如:您需 要在一列中输入身份证号码,要求不重复(重复时提醒),输入 前同样'数据有效性'中设置,选'自定义',然后在'公式' 中输入: =countif($a$1:$a$100,a1)=1 如果已经输入了数据,要检查有没有重复值(有的话用颜色 标识出来),此时可选定该数据区域,然后在'条件格式'的'仅 对唯一值或重复值设置格式'中进行设置。 D. 数据排序 数值的排序,无非就是升序或者降序,很简单,但有一点很 重要,那就是不能有合并单元格。文本的排序同样可以是升序或 者降序,同时还可以用'自定义序列'来排序,这就给我们提供 了很大的方便。比如,我想按:一等奖、二等奖、三等奖的顺序 来排,默认情况下是按第一个字拼音的首字母在 26 个字母中的 顺序来排序,这显示不符合我的想法,那就只能定义一个新序列, 然后按新定义的这个新序列来排序才能得到想要的结果。类似的 还有,将本单位的名单按您想要的顺序来排等,方法都相同。 Excel——让排课更省心 46 E. 表格打印 一般情况下,往 excel 里输入数据是有要求的:第 1 行为字 段行,以后各行为数据,并且中间的数据不要有空白,也不要有 合并单元格,这样,您在排序以及以后的其它操作中才不会出错。 但是这样一来,当您在打印这个表格时,会出现无抬头的现 象,我的解决办法是用页眉来当抬头,但在表格中看不直观,只 有在打印预览中才可见。不管它,设置好标题行重复,直接打印 即可。有时,可能只需要打印表格的部分内容:既可以选定这部 分内容后打印(选择打印选定区域),也可以将这部分内容选定 后,在'页面布局'中设置打印区域,然后再打印就没问题了。 最后的说明:这个 Word 文档,设计成 A4 纸,全部打印好后, 在中缝订上钉子同,从中间对折后便成为一本小册子,携带方便。 其页面布局,可从'页面设置'对话框里查看。样式的定义可从 '开始'选项卡→样式组中查看。 |
|