ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 根据部颁课时表和科目分担计算个人课时数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-5 22:09 | 显示全部楼层 |阅读模式
求大神们帮助!根据部颁课时表和科目分担计算个人课时数,见附件

根据部颁课时表和科目分担计算个人课时数.zip

6.25 KB, 下载次数: 12

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-6 08:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-9-6 09:34 | 显示全部楼层
没有怎么看懂,不过我觉得原始表要做下修改,要不后续不好加工。

TA的精华主题

TA的得分主题

发表于 2018-9-6 10:58 | 显示全部楼层
  1. Sub test()
  2.   Dim r%, i%
  3.   Dim arr, brr
  4.   Dim d As Object
  5.   Set d = CreateObject("scripting.dictionary")
  6.   Set d1 = CreateObject("scripting.dictionary")
  7.   With Worksheets("sheet1")
  8.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  9.     arr = .Range("b20:s26")
  10.     For i = 2 To UBound(arr)
  11.       nj = InStr("一二三四五六七八九", arr(i, 1))
  12.       Debug.Print nj
  13.       Set d1(nj) = CreateObject("scripting.dictionary")
  14.       For j = 2 To UBound(arr, 2)
  15.         If Len(arr(i, j)) <> 0 Then
  16.           d1(nj)(arr(1, j)) = arr(i, j)
  17.         End If
  18.       Next
  19.     Next
  20.     arr = .Range("c1:s19")
  21.     For i = 2 To UBound(arr)
  22.       If Len(arr(i, 1)) <> 0 Then
  23.         nj = Val(Left(arr(i, 1), 1))
  24.         If d1.exists(nj) Then
  25.           For j = 2 To UBound(arr, 2)
  26.             If d1(nj).exists(arr(1, j)) Then
  27.               If Len(arr(i, j)) <> 0 Then
  28.                 d(arr(i, j)) = d(arr(i, j)) + d1(nj)(arr(1, j))
  29.               End If
  30.             End If
  31.           Next
  32.         End If
  33.       End If
  34.     Next
  35.     r = .Cells(.Rows.Count, 22).End(xlUp).Row
  36.     arr = .Range("v2:x" & r)
  37.     For i = 1 To UBound(arr)
  38.       If d.exists(arr(i, 1)) Then
  39.         arr(i, 3) = d(arr(i, 1))
  40.       End If
  41.     Next
  42.     .Range("v2:x" & r) = arr
  43.   End With
  44. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-9-6 10:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
详见附件。

根据部颁课时表和科目分担计算个人课时数.rar

11.62 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2018-9-6 11:17 | 显示全部楼层
  1. Sub 汇总()
  2.     Dim d As Object, dx As Object, arr, i%, j%, k
  3.     Dim Rng As Range
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     Set dx = CreateObject("Scripting.Dictionary")
  6.     Rem  提取部頒计划
  7.     arr = Sheet1.Range("C20:R26")   '
  8.     For i = 2 To UBound(arr)
  9.         For j = 1 To UBound(arr, 2)
  10.             d(arr(1, j) & "|" & i - 1) = arr(i, j)
  11.         Next
  12.     Next
  13.     Rem 提取任课教师姓名
  14.     Dim x%, x1%, a()
  15.     For Each Rng In Sheet1.Range("V2:V" & Sheet1.Range("V65536").End(3).Row)
  16.         If Rng.Value <> "" Then
  17.             x = x + 1: ReDim Preserve a(1 To 2, 1 To x)
  18.             dx(Rng.Value) = x
  19.         End If
  20.     Next
  21.     Rem 汇总工作量
  22.     arr = Sheet1.Range("C1:S19")
  23.     For i = 2 To UBound(arr)
  24.         For j = 2 To UBound(arr, 2)
  25.             If arr(i, j) <> "" Then
  26.                 k = arr(1, j) & "|" & Left(arr(i, 1), 1)
  27.                 If Not dx.Exists(arr(i, j)) Then
  28.                     x = x + 1: ReDim Preserve a(1 To 2, 1 To x)
  29.                     a(1, x) = 1
  30.                     a(2, x) = d.Item(k)
  31.                     dx(arr(i, j)) = x
  32.                 Else
  33.                     x1 = dx.Item(arr(i, j))
  34.                     a(1, x1) = a(1, x1) + 1
  35.                     a(2, x1) = a(2, x1) + d.Item(k)
  36.                 End If
  37.             End If
  38.         Next
  39.     Next
  40.     Sheet1.Range("W2").Resize(dx.Count, 2) = WorksheetFunction.Transpose(a)
  41. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-9-6 11:18 | 显示全部楼层
计算个人课时数.rar (14.09 KB, 下载次数: 12)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-6 12:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢,高手!但我想请教,这个计算能不能用公式来实现?这样在安排分课时能及时发现并调整

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-6 12:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢老师!我想问的是能否用公式完成,这样更有利于排表中的调整

TA的精华主题

TA的得分主题

发表于 2018-9-6 12:23 | 显示全部楼层
偶然古月照江北 发表于 2018-9-6 12:10
谢谢,高手!但我想请教,这个计算能不能用公式来实现?这样在安排分课时能及时发现并调整

随时点击刷新啊

公式函数您发错版块了。

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

本版积分规则

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

GMT+8, 2025-1-13 15:48 , Processed in 0.025538 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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