ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请各位老师帮忙用VBA实现成绩的拆分和合并,谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-5-19 20:46 | 显示全部楼层
xinxin8899 发表于 2019-5-19 17:59
老师,有部分成绩是带一位小数的,麻烦您有时间再给修改一下

7楼
If Not IsNumeric(Mid(t(j), k, 1)) Then 改成:

--------
If Not IsNumeric(Mid(t(j), k, 1)) And Mid(t(j), k, 1) <> "." Then

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-5-19 20:56 | 显示全部楼层
一把小刀闯天下老师您好,真是十分感激,麻烦您了

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-5-20 20:52 | 显示全部楼层
一把小刀闯天下 发表于 2019-5-19 20:46
7楼
If Not IsNumeric(Mid(t(j), k, 1)) Then 改成:

老师您好,在合并的vba中,我想再自动生成一列平均值(如图所示),语句该怎么修改呢?请有空时给以指教,谢谢!
hebing.PNG

TA的精华主题

TA的得分主题

发表于 2019-5-20 21:04 | 显示全部楼层
拆分用正则试了一下,供参考
  1. Sub split_column()
  2. Dim shtdata As Worksheet, arr, rlt(1 To 500, 1 To 6)

  3. Set shtdata = Sheets("拆分")
  4. arr = shtdata.Range("a2").CurrentRegion

  5. For i = 2 To UBound(arr)
  6.        With CreateObject("VBSCRIPT.REGEXP")
  7.                  .Pattern = "(\d\D+)(\d+\.?\d?)"
  8.                  .Global = True
  9.                  n = 0
  10.                  For Each m In .Execute(arr(i, 5))
  11.                          j = j + 1: n = n + 1
  12.                         rlt(j, 1) = j: rlt(j, 2) = arr(i, 2) & "-" & n
  13.                         rlt(j, 3) = arr(i, 3): rlt(j, 4) = arr(i, 4)
  14.                         rlt(j, 5) = m.submatches(0): rlt(j, 6) = m.submatches(1)
  15.                 Next m
  16.       End With
  17. Next i

  18. shtdata.Range("a30").Resize(1, 6) = Array("序号", "编号", "姓名", "班级", "学科", "成绩")
  19. shtdata.Range("a31").Resize(j, 6) = rlt

  20. End Sub
复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-5-20 22:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
xiangbaoan 发表于 2019-5-19 09:34
…………………………

合并的写法挺好的

TA的精华主题

TA的得分主题

发表于 2019-5-21 06:46 | 显示全部楼层
xinxin8899 发表于 2019-5-20 20:52
老师您好,在合并的vba中,我想再自动生成一列平均值(如图所示),语句该怎么修改呢?请有空时给以指教 ...

Option Explicit

Sub 合并()
  Dim arr, i, a, b, m, p, sum
  Sheets("合并").Activate
  arr = [a2].CurrentRegion.Offset(1).Resize(, 7)
  For i = 1 To UBound(arr, 1) - 1
    sum = sum + arr(i, 6)
    a = a & "、" & arr(i, 2): b = b & "、" & arr(i, 5)
    If arr(i, 3) <> arr(i + 1, 3) Then
      m = m + 1
      arr(m, 1) = m: arr(m, 2) = Mid(a, 2): arr(m, 3) = arr(i, 3)
      arr(m, 4) = arr(p + 1, 4): arr(m, 5) = Mid(b, 2)
      arr(m, 6) = sum: arr(m, 7) = Round(sum / (i - p), 1)
      p = i: sum = 0: a = vbNullString: b = a
    End If
  Next
  [a25].Resize(m, UBound(arr, 2)) = arr
End Sub

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-5-21 10:58 | 显示全部楼层
本帖最后由 飞天篮球猪 于 2019-5-21 10:59 编辑

也用字典法合并同类行,供参考
  1. Sub combine_rows()

  2. Dim dic, rawdata, sz, jg

  3. Set dic = CreateObject("Scripting.Dictionary")
  4. Set rawdata = Sheets("合并").Range("a2").CurrentRegion

  5. cols = rawdata.Columns.Count
  6. ReDim jg(1 To rawdata.Rows.Count, 1 To cols + 1)
  7. sz = rawdata

  8. For i = 2 To UBound(sz)
  9.        If dic.exists(sz(i, 3)) Then
  10.                 r = dic(sz(i, 3)): n = n + 1     '如果字典存在姓名,则返回该姓名所在的行号,并累计1次重复次数
  11.                 jg(r, 2) = jg(r, 2) & "," & sz(i, 2)
  12.                 jg(r, 5) = jg(r, 5) & "," & sz(i, 5)
  13.                 jg(r, 6) = jg(r, 6) + sz(i, 6)
  14.                 jg(r, 7) = Round(jg(r, 6) / n, 1)
  15.         Else
  16.                h = h + 1: n = 1        '如果字典中未曾出现姓名,则新建一个行号,并记录1次,该次数用于计算平均分
  17.                dic(sz(i, 3)) = h        '把新生成的行号赋值给字典,key是姓名,value是行号
  18.                jg(h, 1) = h: jg(h, 7) = Round(jg(h, 6) / n, 1)
  19.                For j = 2 To cols
  20.                      jg(h, j) = sz(i, j)
  21.                Next j
  22.         End If
  23. Next i

  24. Range("a30").Resize(1, cols + 1) = [{"序号","编号","姓名","班级","学科","总分","平均分"}]
  25. Range("a31").Resize(h, cols + 1) = jg

  26. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

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

简洁明了快速,老师真乃高人,勤奋、执着!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-18 14:30 , Processed in 0.043833 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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