Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 擦声而过

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

[复制链接]
 楼主| 发表于 2016-12-15 08:25 | 显示全部楼层
today0427 发表于 2016-12-15 08:09
类似于这种,我以前还不太会的时候乱写了一个,你可以参考下

太感谢了,看来老师同行还不少啊!我这还是一个年级生成的课表,全校百十位牵扯到各个年级,还没想到怎么统一能生成教师课表!想想都复杂{:2312:}
现在这样我已经很满足了{:1712:}

回复

使用道具 举报

发表于 2016-12-15 08:39 | 显示全部楼层
语数外跨年级的少,音体美等基本都要跨年级。
就把你的表1、表2完善好,把前面的代码略改造一下,就可以把整个学校的所有老师(不管你是纯初中,还是完中、小初高在一起)的课表全生成到一张sheet中去,要打印、要查询都方便

前面给你提供的代码基本思路是:用“班|课”做为字典的KEY,用星期-节做item,添加进字典,在老师表中,只需查“班|课”的对应星期-节填进表就可以了。
多年级时只把KEY前增加个年级信息,多学段时再加上学段信息,以此类推,很简单的
回复

使用道具 举报

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

万分感谢!!尤其是可以删除,这样的话如果中途有个别调课的老师也可以重新生成!!太方便了!请问要把生成班级课表也加到里边就更完美了,不过一生成就把样表2就冲掉了,请劳烦指导一下!!
QQ截图20161215100422.jpg
QQ截图20161215100435.jpg
教师班级课程表(自动生成).zip (36.75 KB, 下载次数: 79)
回复

使用道具 举报

 楼主| 发表于 2016-12-15 09:11 | 显示全部楼层
上清宫主 发表于 2016-12-15 08:39
语数外跨年级的少,音体美等基本都要跨年级。
就把你的表1、表2完善好,把前面的代码略改造一下,就可以把 ...

{:2712:}对于大神级别的很简单,小菜鸟要好好学习啦!!万分感谢!!
回复

使用道具 举报

发表于 2016-12-15 12:23 | 显示全部楼层
请看附件。

教师班级课程表(自动生成).rar

37.34 KB, 下载次数: 77

评分

参与人数 3 +19 收起 理由
苏子龙 + 9 我和小伙伴都惊呆了
today0427 + 9
擦声而过 + 1 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

发表于 2016-12-15 15:38 | 显示全部楼层
几个都写了,所有老师的课表都生成在教师课表中,所有班的课表都在班级课表中
Sub 生成教师课表()
Application.DisplayAlerts = 0
Dim sht, d, ar()
On Error Resume Next
  Set sht = Sheets("教师课表")
  If Err = Empty Then sht.Delete
  Set sht = Sheets.Add(, Sheets(Sheets.Count))
  sht.Name = "教师课表"
On Error GoTo 0
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)
Next i2, i1
ar = Sheets("表2").[a2:l10].Value
For i1 = 1 To UBound(ar)
     With sht
     Sheets("样表").Range("a1:g13").Copy .Cells(r% + 1, 1)
     .Cells(r% + 2, 7) = 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), "、")
                .Cells(Right(stmp, 1) * 1 + 4 + r, Left(stmp, 1) * 1 + 2) = "七(" & ar(i1, i2) & ")"
            Next
         End If
     Next
     r = r + 15
     End With
Next
Application.DisplayAlerts = 1
End Sub
Sub 删除教师课表()
Application.DisplayAlerts = 0
Dim sht
On Error Resume Next
  Set sht = Sheets("教师课表")
  If Err = Empty Then sht.Delete
On Error GoTo 0
Application.DisplayAlerts = 1
End Sub

Sub 生成班级课表()
Application.DisplayAlerts = 0
Dim sht
On Error Resume Next
  Set sht = Sheets("班级课表")
  If Err = Empty Then sht.Delete
  Set sht = Sheets.Add(, Sheets(Sheets.Count))
  sht.Name = "班级课表"
On Error GoTo 0
For i1% = 1 To 10
     With sht
     Sheets("样表2").Range("a1:g14").Copy .Cells(r% + 1, 1)
     .Cells(r% + 2, 6) = "(" & Sheets("表1").Cells(4, i1 + 3) & ")"
     For i2% = 1 To 5
         .Cells(r% + 5, i2 + 2).Resize(5) = Sheets("表1").Cells(5, i1 - 7 + i2 * 10).Resize(5).Value
         .Cells(r% + 11, i2 + 2).Resize(4) = Sheets("表1").Cells(10, i1 - 7 + i2 * 10).Resize(4).Value
     Next
     r = r + 16
     End With
Next
Application.DisplayAlerts = 1
End Sub
Sub 删除班级课表()
Application.DisplayAlerts = 0
Dim sht
On Error Resume Next
  Set sht = Sheets("班级课表")
  If Err = Empty Then sht.Delete
On Error GoTo 0
Application.DisplayAlerts = 1
End Sub

评分

参与人数 3 +19 收起 理由
苏子龙 + 9 赞一个
today0427 + 9 赞一个
擦声而过 + 1 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-12-15 16:10 | 显示全部楼层
{:3512:}~~万分感谢楼上二位!!
感觉比排课软件更方便!!!
回复

使用道具 举报

发表于 2016-12-15 16:26 | 显示全部楼层
两位老师太棒了!
回复

使用道具 举报

发表于 2016-12-15 16:33 | 显示全部楼层
比排课软件更方便
回复

使用道具 举报

发表于 2016-12-15 20:15 | 显示全部楼层
还有几名课程没有老师教呀!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 10:50 , Processed in 0.302973 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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