ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2008|回复: 13

[求助] 提取教师上课节次

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-10-12 22:17 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
根据表1中黄底色区域数据,填写表2中相应老师任课节次。有几个教师的已做好示例。自己实在是做不出来。我写的代码在附件中有,但确实很糟糕。希望不吝赐教。

带姓名.zip

44.8 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2017-10-12 22:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub 调整格式()
  2.     Dim vData As Variant, nRow As Integer, nCol As Integer
  3.     Dim oDic As Object
  4.     Dim sWeek As String, nClass As Integer, nLesson As Integer, sTeacher As String
  5.     Dim vFill As Variant
  6.    
  7.     Set oDic = CreateObject("Scripting.Dictionary")
  8.     vData = Sheet1.[A19].CurrentRegion.Value
  9.     For nCol = 4 To UBound(vData, 2)
  10.         If vData(1, nCol) <> "" Then sWeek = Trim(vData(1, nCol))
  11.         If vData(2, nCol) <> "" Then nClass = Val(vData(2, nCol))
  12.         For nRow = 3 To UBound(vData)
  13.             nLesson = Val(vData(nRow, 3))
  14.             If vData(nRow, nCol) <> "" Then
  15.                 sTeacher = Trim(vData(nRow, nCol))
  16.                 oDic(sTeacher & "|" & sWeek & "|" & nLesson) = nClass
  17.             End If
  18.         Next
  19.     Next
  20.     vData = Sheet3.UsedRange.Value
  21.     ReDim vFill(3 To UBound(vData), 3 To UBound(vData, 2))
  22.     For nCol = 3 To UBound(vData, 2)
  23.         If vData(2, nCol) <> "" Then
  24.             sWeek = Trim(vData(2, nCol))
  25.             nLesson = 1
  26.         Else
  27.             nLesson = nLesson + 1
  28.         End If
  29.         For nRow = 3 To UBound(vData)
  30.             sTeacher = Trim(vData(nRow, 1))
  31.             If oDic.Exists(sTeacher & "|" & sWeek & "|" & nLesson) Then vFill(nRow, nCol) = oDic(sTeacher & "|" & sWeek & "|" & nLesson)
  32.         Next
  33.     Next
  34.     Sheet3.[C3].Resize(UBound(vFill) - 2, UBound(vFill, 2) - 2) = vFill
  35. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-10-12 22:38 | 显示全部楼层
附上附件以供参考

带姓名(by.micro).rar

48.28 KB, 下载次数: 21

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-12 23:40 | 显示全部楼层
microyip 发表于 2017-10-12 22:38
附上附件以供参考

非常感谢您及时地解答。
可能是我没有说清楚。我想要的结果是星期一有八节课,某个教师带的是第几节课。不是统计所带总节数。比如赵  2星期一第一节1.2两个班上课。则第一节有课,统计为1,统计到表2中赵  2星期一八列中第一列单元格中。我将表格加了一行第几节的内容,重新上传附件,希望得到您的帮助。非常感谢! 捕获.PNG

带姓名(by.micro).xlsm.zip

41.42 KB, 下载次数: 9

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-12 23:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
microyip 发表于 2017-10-12 22:38
附上附件以供参考

回复的信息需要审核,您早点休息,明天有空请帮我看看,非常感谢!

TA的精华主题

TA的得分主题

发表于 2017-10-13 07:54 | 显示全部楼层
乐乐2006201505 发表于 2017-10-12 23:40
非常感谢您及时地解答。
可能是我没有说清楚。我想要的结果是星期一有八节课,某个教师带的是第几节课。 ...

你细心看清楚,填的数是班次,不是总和,例如,星期一,赵2,在第一节课里有1、2两个班,因为重复了,取了后面的一个班的班次2

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-13 07:55 来自手机 | 显示全部楼层
本帖最后由 乐乐2006201505 于 2017-10-13 08:57 编辑

奥,谢谢您!我再看看。
另外能不能把赵  2老师的班级在同一个框里面填全,如将2改为1,2。谢谢!

TA的精华主题

TA的得分主题

发表于 2017-10-13 11:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你把建字典的过程改为字符串相连就可以了

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-13 11:24 来自手机 | 显示全部楼层
本帖最后由 乐乐2006201505 于 2017-10-13 15:09 编辑

好,我试试,不会了再请教您。

将第16句改为oDic(sTeacher & "|" & sWeek & "|" & nLesson) = nClass & ","& nClass吧!

这样改了不合适啊!
再次求助。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-13 20:47 | 显示全部楼层
microyip 发表于 2017-10-13 11:18
你把建字典的过程改为字符串相连就可以了

具体怎么做,一下午了,还没有头绪,请您明示,谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 04:48 , Processed in 0.038888 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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