Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 12320|回复: 30

[已解决]总课表生成教师和班级课表,感觉比排课软件还给力

[复制链接]
发表于 2016-12-14 14:20 | 显示全部楼层 |阅读模式
本帖最后由 擦声而过 于 2016-12-15 16:12 编辑

刚接触教务工作,制作总课表后通过复制出教师课表非常繁琐,
想通过VBA解决,无奈水平有限,请大神指点,不知道思路对否。
想通过总表“表1”,利用“表2”,生成如图各位老师的课程表,工作表的名称也以老师命名。万分感谢!!

表1

表1
表1

表2

表2
表2
QQ截图20161214151327.jpg QQ截图20161214151355.jpg QQ截图20161214145701.jpg
教师课程表.zip (37.41 KB, 下载次数: 149)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-12-14 15:30 | 显示全部楼层    本楼为最佳答案   
这是个练习字典的好例子。

教师课程表.rar

31.28 KB, 下载次数: 189

评分

参与人数 3 +13 收起 理由
乐乐2006201506 + 3 赞一个
today0427 + 9 太棒啦!
擦声而过 + 1 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-12-14 15:38 | 显示全部楼层
grf1973 发表于 2016-12-14 15:30
这是个练习字典的好例子。

{:1112:}大神,我得逐行消化消化~~万分感谢!!
回复

使用道具 举报

发表于 2016-12-14 16:01 | 显示全部楼层
凑热闹,没写判断、删除表的代码
Sub test()
Dim d
Set d = CreateObject("scripting.dictionary")
ar = Sheets("表1").[C4:ba12].Value
For i1% = 2 To UBound(ar, 2)
    If ar(1, i1) = 1 Then xq = xq% + 1
    For i2% = 2 To UBound(ar)
        d(ar(1, i1) & "|" & ar(i2, i1)) = d(ar(1, i1) & "|" & ar(i2, i1)) & "、" & xq & "-" & ar(i2, 1)
        ss1 = ar(1, i1) & "|" & ar(i2, i1)
        ss2 = d(ss1)
Next i2, i1
ss2 = d("1|语")
ar = Sheets("表2").[a2:l4].Value
For i1 = 1 To UBound(ar)
     Set s = Sheets.Add
     s.Name = ar(i1, 1)
     Sheets("表3").Cells.Copy s.[a1]
     s.[g2] = ar(i1, 1)
     For i2 = 3 To UBound(ar, 2)
         If ar(i1, i2) <> "" Then
            For Each stmp In Split(Mid(d(ar(i1, i2) & "|" & ar(i1, 2)), 2), "、")
                s.Cells(Right(stmp, 1) * 1 + 4, Left(stmp, 1) * 1 + 2) = "七(" & ar(i1, i2) & ")"
            Next
         End If
     Next
Next
End Sub

评分

参与人数 3 +13 收起 理由
擦声而过 + 1 很给力
乐乐2006201506 + 3 赞一个
today0427 + 9 来学习

查看全部评分

回复

使用道具 举报

发表于 2016-12-14 19:16 | 显示全部楼层
本帖最后由 today0427 于 2016-12-14 19:32 编辑

不用字典我也来一个 新建文件夹.rar (32.37 KB, 下载次数: 70)

评分

参与人数 2 +4 收起 理由
擦声而过 + 1 很给力
乐乐2006201506 + 3 赞一个

查看全部评分

回复

使用道具 举报

发表于 2016-12-15 07:19 | 显示全部楼层
不过我诚恳地建议楼主,最好不要在一个工作簿中生成这种多表的课程表,复制建表浪费时间不说,往少里说点,假设你们学校有50名老师,想象一下选择其中一位老师的课表查看,那种感觉一言难尽。倒不如只建立一张教师个人课表,用字典生成教师名单作为课表的有效性下拉菜单,然后选择教师生成课表,打印的时候只需要用程序按照下拉菜单的名单一个一个生成打印出来就行了。或者用inputbox输入教师姓名查看打印课表都行。个人经验,仅供参考。
回复

使用道具 举报

发表于 2016-12-15 07:32 | 显示全部楼层
确实如楼上所说,一个年级就10个班,初中三个年级,这大致可估计出教师人数,一个教师一张表,在实际工作中这样做够他受的。以前遇到过一个中层,他算老师的课时津贴也是一人一表张,结果用了两月就再也不这么用了
可以做成下拉的,或者就做到几张表(分年级或分学科来填)甚至一张表中,查看也很方便
回复

使用道具 举报

 楼主| 发表于 2016-12-15 07:41 | 显示全部楼层
上清宫主 发表于 2016-12-15 07:32
确实如楼上所说,一个年级就10个班,初中三个年级,这大致可估计出教师人数,一个教师一张表,在实际工作中 ...

非常感谢楼上两位的帮助!请问下拉菜单式可不可以整体都打印出来呢,因为在学期初要把每个老师的课程表发到手上。
回复

使用道具 举报

发表于 2016-12-15 07:54 | 显示全部楼层
可以啊,程序整个把教师姓名过一遍,生成一张表就打印一张表,按一下按钮就全部打完
回复

使用道具 举报

发表于 2016-12-15 08:09 | 显示全部楼层
类似于这种,我以前还不太会的时候乱写了一个,你可以参考下
  1. Sub 成绩登记册选择班级全部打印()
  2.     Dim x As Integer, arr
  3.             arr =  Sheets("家长会签到表").Range("l3:l38") '这是所有班级的班级名,从家长会签到表的单元格导入的,你也可以直接放进数组中
  4.          With Sheets("登记")
  5.                 For x = 1 To 36
  6.                     .Range("b2") = arr(x, 1)
  7.                     Sheets(Array("封面", "汇总", "登记")).Select
  8.                      ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
  9.                 Next x
  10.             End With
  11.     End Sub
复制代码

评分

参与人数 2 +10 收起 理由
苏子龙 + 9 赞一个
擦声而过 + 1 神马都是浮云

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 15:29 , Processed in 0.665665 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表