分享

Excel——让排课更省心

 快乐图书馆8896 2020-03-30

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 纸,全部打印好后,

在中缝订上钉子同,从中间对折后便成为一本小册子,携带方便。

其页面布局,可从'页面设置'对话框里查看。样式的定义可从

'开始'选项卡→样式组中查看。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多