ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 按要求将考试成绩导入

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-16 19:50 | 显示全部楼层 |阅读模式
按要求将考试成绩导入,具体要求见附件。求助老师,谢谢 2.rar (24.71 KB, 下载次数: 24)

TA的精华主题

TA的得分主题

发表于 2024-3-16 22:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
有点麻烦
2.zip (34.39 KB, 下载次数: 22)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-16 23:07 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-3-17 07:33 | 显示全部楼层
本帖最后由 taller 于 2024-3-17 07:52 编辑
  1. Option Explicit
  2. Sub Demo()
  3.     Dim oDicCJ, oDicJP, oDicNL, rngData2 As Range
  4.     Dim i As Long, j As Long, k As Long, sKey As String
  5.     Dim arrData, arrData2, arrData3, aMin, aMax, aIdx
  6.     Dim oSht1 As Worksheet, oSht2 As Worksheet
  7.     Const COLCNT = 13
  8.     Const SUBJECT = "语数英物历化生政地"
  9.     aMin = Split("60 20 40 10 30 10 30 30 30")
  10.     aMax = Split("85 50 65 30 50 30 45 50 51")
  11.     aIdx = Split("3 4 5 6 13 7 9 11 14")
  12.     Set oSht1 = ThisWorkbook.Sheets("1")
  13.     Set oSht2 = ThisWorkbook.Sheets("上次成绩")
  14.     Set oDicCJ = CreateObject("scripting.dictionary")
  15.     Set oDicJP = CreateObject("scripting.dictionary")
  16.     Set oDicNL = CreateObject("scripting.dictionary")
  17.     ' testing ============
  18.     '    oSht1.Range("C2:M7").ClearContents
  19.     '    oSht1.Range("C2:M7").Interior.Color = xlNone
  20.     '============
  21.     arrData3 = oSht2.Range("V1").CurrentRegion.Value
  22.     For i = LBound(arrData3) + 1 To UBound(arrData3)
  23.         oDicNL(arrData3(i, 1)) = i
  24.     Next i
  25.     arrData2 = oSht2.Range("AB1").CurrentRegion.Value
  26.     For i = LBound(arrData2) + 1 To UBound(arrData2)
  27.         oDicCJ(arrData2(i, 1)) = ""
  28.     Next i
  29.     Set rngData2 = oSht2.Range("A1").CurrentRegion
  30.     arrData2 = rngData2.Value
  31.     For i = LBound(arrData2) + 1 To UBound(arrData2)
  32.         oDicCJ(arrData2(i, 1)) = i
  33.     Next i
  34.     Dim rngRed As Range, rRow As Range, iR As Long, sSub, iLoc
  35.     Set rngData2 = oSht1.Range("A1").CurrentRegion
  36.     arrData = rngData2.Value
  37.     For i = 2 To UBound(arrData)
  38.         sKey = arrData(i, 2)
  39.         If Len(sKey) > 0 Then
  40.             If oDicCJ.exists(sKey) Then
  41.                 iR = oDicCJ(sKey)
  42.                 arrData(i, 3) = arrData2(iR, 2) ' 班级
  43.                 arrData(i, 4) = arrData2(iR, 3) ' 语文
  44.                 arrData(i, 5) = arrData2(iR, 4) ' 数学
  45.                 If oDicJP.exists(sKey) Then
  46.                     arrData(i, 6) = ""
  47.                 Else
  48.                     arrData(i, 6) = arrData2(iR, 5) ' 英语
  49.                 End If
  50.                 For j = 3 To 6
  51.                     If Len(arrData(i, j)) = 0 Then
  52.                         arrData(i, j) = Application.RandBetween(aMin(iLoc - 3), aMax(iLoc - 3))
  53.                         Set rngRed = MergeRng(rngRed, oSht1.Cells(i, j))
  54.                     End If
  55.                 Next
  56.                 arrData(i, 13) = arrData2(iR, 16) ' 组合
  57.                 If Len(arrData(i, 13)) = 0 Then
  58.                     Set rngRed = MergeRng(rngRed, oSht1.Cells(i, 7).Resize(1, 7))
  59.                 Else
  60.                     For k = 1 To Len(arrData(i, 13))
  61.                         sSub = Mid(arrData(i, 13), k, 1)
  62.                         iLoc = InStr(SUBJECT, sSub)
  63.                         If iLoc > 0 Then
  64.                             If Len(arrData2(iR, aIdx(iLoc - 1))) = 0 Then
  65.                                 arrData(i, iLoc + 3) = Application.RandBetween(aMin(iLoc - 1), aMax(iLoc - 1))
  66.                                 Set rngRed = MergeRng(rngRed, oSht1.Cells(i, iLoc + 3))
  67.                             Else
  68.                                 arrData(i, iLoc + 3) = arrData2(iR, aIdx(iLoc - 1))
  69.                             End If
  70.                         End If
  71.                     Next
  72.                 End If
  73.             Else
  74.                 If oDicNL.exists(sKey) Then
  75.                     iR = oDicNL(sKey)
  76.                     arrData(i, 3) = arrData3(iR, 3) ' 班级
  77.                     arrData(i, 13) = arrData3(iR, 2)
  78.                     Set rngRed = MergeRng(rngRed, oSht1.Cells(i, 4).Resize(1, COLCNT - 4))
  79.                 Else
  80.                     Set rngRed = MergeRng(rngRed, oSht1.Cells(i, 3).Resize(1, COLCNT - 2))
  81.                 End If
  82.             End If
  83.         End If
  84.     Next
  85.     rngData2.Value = arrData
  86.     If Not rngRed Is Nothing Then
  87.         rngRed.Interior.Color = vbRed
  88.     End If
  89. End Sub

  90. Function MergeRng(rngMain As Range, rngNew As Range)
  91.     If rngMain Is Nothing Then
  92.         Set rngMain = rngNew
  93.     Else
  94.         Set rngMain = Application.Union(rngMain, rngNew)
  95.     End If
  96.     Set MergeRng = rngMain
  97. End Function


复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-17 07:34 | 显示全部楼层
本帖最后由 taller 于 2024-3-17 07:52 编辑

2024-03-16_00004.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-17 07:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老师你好,不在上次成绩表里的学生90就没有随机生成成绩。

TA的精华主题

TA的得分主题

发表于 2024-3-17 18:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
WPS里的JSA练习一下——


微信截图_20240317184020.png

QQ截图20240317184301.png


240317_2.rar

33.76 KB, 下载次数: 18

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-17 19:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sunya_0529 发表于 2024-3-17 18:47
WPS里的JSA练习一下——

WPS里面没弄过,尝试来运行一下,谢谢

TA的精华主题

TA的得分主题

发表于 2024-3-18 10:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
有什么实际意义吗?

TA的精华主题

TA的得分主题

发表于 2024-3-18 11:26 | 显示全部楼层

  1. Option Explicit
  2. Sub Demo2()
  3.     Dim oDicCJ, oDicJP, oDicNL, rngData2 As Range
  4.     Dim i As Long, j As Long, k As Long, sKey As String
  5.     Dim arrData, arrData2, arrData3, aMin, aMax, aIdx
  6.     Dim oSht1 As Worksheet, oSht2 As Worksheet
  7.     Const COLCNT = 13
  8.     Const SUBJECT = "语数英物历化生政地"
  9.     aMin = Split("60 20 40 10 30 10 30 30 30")
  10.     aMax = Split("85 50 65 30 50 30 45 50 51")
  11.     aIdx = Split("3 4 5 6 13 7 9 11 14")
  12.     Set oSht1 = ThisWorkbook.Sheets("1")
  13.     Set oSht2 = ThisWorkbook.Sheets("上次成绩")
  14.     Set oDicCJ = CreateObject("scripting.dictionary")
  15.     Set oDicJP = CreateObject("scripting.dictionary")
  16.     Set oDicNL = CreateObject("scripting.dictionary")
  17.     ' testing ============
  18.     oSht1.Range("C2:M7").Interior.Color = xlNone
  19.     oSht1.Range("C2:M7").Interior.Color = xlNone
  20.     '============
  21.     arrData3 = oSht2.Range("V1").CurrentRegion.Value
  22.     For i = LBound(arrData3) + 1 To UBound(arrData3)
  23.         oDicNL(arrData3(i, 1)) = i
  24.     Next i
  25.     arrData2 = oSht2.Range("AB1").CurrentRegion.Value
  26.     For i = LBound(arrData2) + 1 To UBound(arrData2)
  27.         oDicCJ(arrData2(i, 1)) = ""
  28.     Next i
  29.     Set rngData2 = oSht2.Range("A1").CurrentRegion
  30.     arrData2 = rngData2.Value
  31.     For i = LBound(arrData2) + 1 To UBound(arrData2)
  32.         oDicCJ(arrData2(i, 1)) = i
  33.     Next i
  34.     Dim rngRed As Range, rRow As Range, iR As Long, sSub, iLoc
  35.     Set rngData2 = oSht1.Range("A1").CurrentRegion
  36.     arrData = rngData2.Value
  37.     For i = 2 To UBound(arrData)
  38.         sKey = arrData(i, 2)
  39.         If Len(sKey) > 0 Then
  40.             If oDicCJ.exists(sKey) Then
  41.                 iR = oDicCJ(sKey)
  42.                 arrData(i, 3) = arrData2(iR, 2) ' 班级
  43.                 arrData(i, 4) = arrData2(iR, 3) ' 语文
  44.                 arrData(i, 5) = arrData2(iR, 4) ' 数学
  45.                 If oDicJP.exists(sKey) Then
  46.                     arrData(i, 6) = ""
  47.                 Else
  48.                     arrData(i, 6) = arrData2(iR, 5) ' 英语
  49.                 End If
  50.                 For j = 3 To 6
  51.                     If Len(arrData(i, j)) = 0 Then
  52.                         arrData(i, j) = Application.RandBetween(aMin(iLoc - 3), aMax(iLoc - 3))
  53.                         Set rngRed = MergeRng(rngRed, oSht1.Cells(i, j))
  54.                     End If
  55.                 Next
  56.                 arrData(i, 13) = arrData2(iR, 16) ' 组合
  57.                 If Len(arrData(i, 13)) = 0 Then
  58.                     Set rngRed = MergeRng(rngRed, oSht1.Cells(i, 7).Resize(1, 7))
  59.                 Else
  60.                     For k = 1 To Len(arrData(i, 13))
  61.                         sSub = Mid(arrData(i, 13), k, 1)
  62.                         iLoc = InStr(SUBJECT, sSub)
  63.                         If iLoc > 0 Then
  64.                             If Len(arrData2(iR, aIdx(iLoc - 1))) = 0 Then
  65.                                 arrData(i, iLoc + 3) = Application.RandBetween(aMin(iLoc - 1), aMax(iLoc - 1))
  66.                                 Set rngRed = MergeRng(rngRed, oSht1.Cells(i, iLoc + 3))
  67.                             Else
  68.                                 arrData(i, iLoc + 3) = arrData2(iR, aIdx(iLoc - 1))
  69.                             End If
  70.                         End If
  71.                     Next
  72.                 End If
  73.             Else
  74.                 If oDicNL.exists(sKey) Then
  75.                     iR = oDicNL(sKey)
  76.                     arrData(i, 3) = arrData3(iR, 3) ' 班级
  77.                     For j = 3 To 6
  78.                         If Len(arrData(i, j)) = 0 Then
  79.                             arrData(i, j) = Application.RandBetween(aMin(iLoc - 3), aMax(iLoc - 3))
  80.                             Set rngRed = MergeRng(rngRed, oSht1.Cells(i, j))
  81.                         End If
  82.                     Next
  83.                     arrData(i, 13) = arrData3(iR, 2) ' 组合
  84.                     If Len(arrData(i, 13)) = 0 Then
  85.                         Set rngRed = MergeRng(rngRed, oSht1.Cells(i, 7).Resize(1, 7))
  86.                     Else
  87.                         For k = 1 To Len(arrData(i, 13))
  88.                             sSub = Mid(arrData(i, 13), k, 1)
  89.                             iLoc = InStr(SUBJECT, sSub)
  90.                             If iLoc > 0 Then
  91.                                 If Len(arrData(i, iLoc + 3)) = 0 Then
  92.                                     arrData(i, iLoc + 3) = Application.RandBetween(aMin(iLoc - 1), aMax(iLoc - 1))
  93.                                     Set rngRed = MergeRng(rngRed, oSht1.Cells(i, iLoc + 3))
  94.                                 End If
  95.                             End If
  96.                         Next
  97.                     End If
  98.                 Else
  99.                     Set rngRed = MergeRng(rngRed, oSht1.Cells(i, 3).Resize(1, COLCNT - 2))
  100.                 End If
  101.             End If
  102.         End If
  103.     Next
  104.     rngData2.Value = arrData
  105.     If Not rngRed Is Nothing Then
  106.         rngRed.Interior.Color = vbRed
  107.     End If
  108. End Sub
复制代码

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-17 21:39 , Processed in 0.050478 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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