自98年至今,在教务处排课,已有20余年的时间。想来最早时,是手绘出多张空白课程表,用铅笔尝试安排,用橡皮修改,这是跟师傅学来的。后来信息技术发展,学校配备了计算机、打印机,空白表格由手绘改为了打印,确实省了不少事。再后来逐步学习excel,时至今日,整理了一套基本符合学校使用的模板,为每年的排课节省了大量的人力、物力。期间也曾下载试用过几款排课软件,导入基本数据,设定若干规则,一键排课,费用贵不说,结果总是不尽如人意,还需要部分调整,调整时牵一发而动全身,感觉倒不如自己一节节排的更实用。

基础数据

image.png

由于我们是初中,所以整个文件由分年级的3个文件和1个总课程表组成。
7、8、9三个文件由年级分包主任分别单独录入部分数据。
image.png
【设置】工作表,用于基础数据录入。需要设置的项目分别为:学校或学部,班级前缀,年级,打印日期。一次设置,各处引用。
image.png
【K】,用于录入教师任课表。如图,为7年级每班各科教师任课表。
image.png
目前根据学校实际,预设了【1】-【7】共7个班,选择某个班,在每节次处,选择打算设置的课程。科目可以下拉选择或手动录入或复制、粘贴,切记不要出错字,否则就会出现查找不到等错误。

汇总筛选

image.png

【ks】是各班各科课时数汇总。首先需要在B3至O3区域录入各科应安排课时,此表会根据前面各班已录入课程情况,自动统计各科已安排课时、计算出未安排课时。另外,早晚自习及上下午第4节,需要尽量均匀,所以也做了汇总。你想要的,都可以汇总。这么多的汇总,实际上只用了countif和indirect两个函数。但却省去了你逐个去统计、核对的时间。有了这些汇总,就可以尽自己最大的努力使得课表的安排更加科学、对于教师间更均衡。
image.png
【cx1b1k】,用于查询、打印单班单科的课程表,只需要选择班级、科目,其他的自动显示。在表格中显示的是科目名称。
image.png
【cx6b1k】,用于查询、打印多班单科的课程表,表格中显示的是在这节课有这科课的班级,有重课的,会同时显示在一个单元格里。感觉这个是个万能查询表,可以选择某科的任意几个班的课程表,且同时显示,对于个别教师课表调整很有帮助。
image.png
【cx7b1k】,用于查询、打印任全年级课教师课表。单元格内显示的是需要上课的班级。因教师课一般不能重复,所以这个未设置同一单元格重复显示,也就是重复了也只显示1个班。
image.png
总课程表中【z】自动生成学校总课表。
image.png
【s】为教师任课总表,由各年级教师任课表自动生成。

image.png
还可以自动生成学科+姓名的任课表。
这套模板,只需要在基础表录入日期、年度、教师、各班课表等基础信息,课时数、教师课程表、学校总课表等均通过公式自动生成,使用几年来,确实可以在编排、打印课程表时极大地提高效率。

庖丁解牛

下拉选择

image.png
选择需要设置下拉选择的区域,数据验证,数据验证。
允许:选择序列,来源处输入要设置的所有科目,用英文逗号分隔。选中左下角的选择框。后续需要增、删学科时,也是在这个来源处进行维护。
image.png

课时汇总

image.png
如图,d7=COUNTIF(INDIRECT($A7&”!$B$4:$G$13”),D$2)
先看INDIRECT($A7&”!$B$4:$G$13”)部分,用于组装出一个”2!$B$4:$G$13”这样的一个地址,用函数INDIRECT转化为对这个地址的引用。
COUNTIF(INDIRECT(“2!$B$4:$G$13”),D$2),d$2为数学,这个函数的意义就是统计在”2!$B$4:$G$13”这个区域中“数学”的个数,也就是2班已安排了几节数学课。
类似做好一个单元格,向右、向下填充即可。
image.png
各科未安排课时数,用总课时数减已安排课时数,就是这样的简单。
image.png
对于特殊节次的统计,如早自习、上下午第4节等,只需要将统计区域更改为对应的范围即可。
如上图d25=COUNTIF(INDIRECT($A16&”!$c$5:$G$5”),D$2)
公式的意义是在2班早自习区域统计数学的个数。

单班单科查询

image.png
c7=IF(@INDIRECT($A$3&”!RC”,)=$E$3,$E$3,””)
如果1班课程表的同样位置等于语文,就显示语文,否则就空白。
此公式可向右向下填充。
image.png
粘贴到下面,要适当修改公式。

多班一科查询

image.png
这个公式有些长。
e6=IF($A$3<>””,IF(OFFSET(INDIRECT(“‘“&$A$3&”‘!A3”),ROW()-3,COLUMN()-1,1,1)=$A$4,$A$3,””),””)&IF($B$3<>””,IF(OFFSET(INDIRECT(“‘“&$B$3&”‘!A3”),ROW()-3,COLUMN()-1,1,1)=$A$4,$B$3,””),””)&IF($C$3<>””,IF(OFFSET(INDIRECT(“‘“&$C$3&”‘!A3”),ROW()-3,COLUMN()-1,1,1)=$A$4,$C$3,””),””)&IF($D$3<>””,IF(OFFSET(INDIRECT(“‘“&$D$3&”‘!A3”),ROW()-3,COLUMN()-1,1,1)=$A$4,$D$3,””),””)&IF($E$3<>””,IF(OFFSET(INDIRECT(“‘“&$E$3&”‘!A3”),ROW()-3,COLUMN()-1,1,1)=$A$4,$E$3,””),””)&IF($F$3<>””,IF(OFFSET(INDIRECT(“‘“&$F$3&”‘!A3”),ROW()-3,COLUMN()-1,1,1)=$A$4,$F$3,””),””)&IF($G$3<>””,IF(OFFSET(INDIRECT(“‘“&$G$3&”‘!A3”),ROW()-3,COLUMN()-1,1,1)=$A$4,$G$3,””),””)
简述如下:如a3不为空,则查询1班课程表的指定位置是否等于a4处的科目,相等,则显示1,表示1班此节有语文课,否则为空白,表示1班此位置无语文课,继续根据b3/e3…判断其他班,最后将所有此节有语文课的班级合并到一起。如图中的e6中的13467,表示这节课,13467这5个班上语文课。

任年级课查询

image.png
公式虽然较长,但只用到了if函数,嵌套了7次。多个班有这科课的,只显示最小的班,其他的班就自动丢弃了。

总课程表

image.png
这个总课程表,设计好表格结构,直接用=完成。一次设置,终生受用,磨刀不误砍柴工。
image.png
这个,也是一个等号,解决问题。

带教师姓名的课程表

image.png
用match函数,查找出当前位置学科在教师任课表中的列数,图中语文应为3.
用vlookup函数,查找出这个班对应列的教师姓名,如图中查询出刘淑梅。
用concatenate函数,将相关信息合并显示。

模板下载

2019-2020课程表.zip

也许这个模板还不尽完美,也许他并不适合所有学校,但多学些excel函数确实能提高工作效率却是一定的。在学习的过程中,我感觉以下3点是需要注意的。
1.分析任务,谋划布局。
2.细化任务,书写函数。
3.疑难问题,论坛解疑。