ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请大神帮忙编写个VBA,开学减轻工作量

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-3 09:07 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 烟火孤星泪 于 2024-9-15 13:21 编辑

已完成,谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-3 10:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-9-3 11:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub 按钮12_Click()
    arr = Sheets("学生名单").[a1].CurrentRegion
    Set d = CreateObject("scripting.dictionary")
    Set dd = CreateObject("scripting.dictionary")
    For j = 2 To UBound(arr)
        x = Format(arr(j, 6), "00") & "栋"
        If Not d.exists(x) Then
            Set d(x) = CreateObject("scripting.dictionary")
        End If
        If Not d(x).exists(arr(j, 7) & "") Then
            Set d(x)(arr(j, 7) & "") = CreateObject("scripting.dictionary")
        End If
        d(x)(arr(j, 7) & "")(j) = j
    Next j
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each sh In Sheets
        If d.exists(sh.Name & "") Then
            For Each cmt In sh.Comments
                cmt.Delete
            Next cmt
            r = sh.Cells(Rows.Count, 1).End(3).Row
            For j = 3 To r Step 4
                For i = sh.Cells(j, Columns.Count).End(xlToLeft).Column To 2 Step -1
                    If d(sh.Name & "").exists(sh.Cells(j, i) & "") Then
                        dd.RemoveAll
                        y1 = sh.Name & ""
                        y2 = sh.Cells(j, i) & ""
                        y3 = d(sh.Name & "")(sh.Cells(j, i) & "").Count
                        sh.Cells(j + 1, i) = d(sh.Name & "")(sh.Cells(j, i) & "").Count
                        For Each k In d(sh.Name & "")(sh.Cells(j, i) & "").keys
                            dd(arr(k, 2)) = dd(arr(k, 2)) & Chr(10) & arr(k, 3) & "-" & arr(k, 8)
                        Next k
                        If dd.Count = 1 Then
                            sh.Cells(j + 2, i) = dd.keys()(0)
                        Else
                            sh.Cells(j + 2, i) = Join(dd.keys, ",")
                            sh.Cells(j + 2, i).Interior.ColorIndex = 6
                        End If
                        If sh.Cells(j + 2, i) = sh.Cells(j + 2, i + 1) Then
                            sh.Cells(j + 2, i).Resize(1, 2).Merge
                        End If
                        
                        str1 = ""
                        For Each k In dd.keys
                            str1 = str1 & Chr(10) & k & Chr(10) & dd(k)
                        Next k
                        sh.Cells(j, i).AddComment
                        sh.Cells(j, i).Comment.Visible = False
                        sh.Cells(j, i).Comment.Text Text:=str1
                    End If
                Next i
            Next j
        End If
    Next sh
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

发表于 2024-9-3 11:07 | 显示全部楼层
供参考。。。。。。

宿舍综合分布图(24-25学年第一学期).zip

309.69 KB, 下载次数: 10

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-3 11:29 | 显示全部楼层
liulang0808 发表于 2024-9-3 11:07
供参考。。。。。。

那个批注框太小了,请问调哪里,可以调大一点?

TA的精华主题

TA的得分主题

发表于 2024-9-3 11:50 | 显示全部楼层
练习。没有写完,下午完善。

宿舍综合分布图(24-25学年第一学期).rar

172.67 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2024-9-3 12:50 | 显示全部楼层
  1. Sub 按钮12_Click()
  2.     arr = Sheets("学生名单").[a1].CurrentRegion
  3.     Set d = CreateObject("scripting.dictionary")
  4.     Set dd = CreateObject("scripting.dictionary")
  5.     For j = 2 To UBound(arr)
  6.         x = Format(arr(j, 6), "00") & "栋"
  7.         If Not d.exists(x) Then
  8.             Set d(x) = CreateObject("scripting.dictionary")
  9.         End If
  10.         If Not d(x).exists(arr(j, 7) & "") Then
  11.             Set d(x)(arr(j, 7) & "") = CreateObject("scripting.dictionary")
  12.         End If
  13.         d(x)(arr(j, 7) & "")(j) = j
  14.     Next j
  15.     Application.ScreenUpdating = False
  16.     Application.DisplayAlerts = False
  17.     For Each sh In Sheets
  18.         If d.exists(sh.Name & "") Then
  19.             For Each cmt In sh.Comments
  20.                 cmt.Delete
  21.             Next cmt
  22.             r = sh.Cells(Rows.Count, 1).End(3).Row
  23.             For j = 3 To r Step 4
  24.                 For i = sh.Cells(j, Columns.Count).End(xlToLeft).Column To 2 Step -1
  25.                     If d(sh.Name & "").exists(sh.Cells(j, i) & "") Then
  26.                         dd.RemoveAll
  27.                         y1 = sh.Name & ""
  28.                         y2 = sh.Cells(j, i) & ""
  29.                         y3 = d(sh.Name & "")(sh.Cells(j, i) & "").Count
  30.                         sh.Cells(j + 1, i) = d(sh.Name & "")(sh.Cells(j, i) & "").Count
  31.                         For Each k In d(sh.Name & "")(sh.Cells(j, i) & "").keys
  32.                             dd(arr(k, 2)) = dd(arr(k, 2)) & Chr(10) & arr(k, 3) & "-" & arr(k, 8)
  33.                         Next k
  34.                         If dd.Count = 1 Then
  35.                             sh.Cells(j + 2, i) = dd.keys()(0)
  36.                         Else
  37.                             sh.Cells(j + 2, i) = Join(dd.keys, ",")
  38.                             sh.Cells(j + 2, i).Interior.ColorIndex = 6
  39.                         End If
  40.                         If sh.Cells(j + 2, i) = sh.Cells(j + 2, i + 1) Then
  41.                             sh.Cells(j + 2, i).Resize(1, 2).Merge
  42.                         End If
  43.                         
  44.                         str1 = ""
  45.                         For Each k In dd.keys
  46.                             str1 = str1 & Chr(10) & k & Chr(10) & dd(k)
  47.                         Next k
  48.                         sh.Cells(j, i).AddComment
  49.                         sh.Cells(j, i).Comment.Visible = False
  50.                         sh.Cells(j, i).Comment.Text Text:=str1
  51.                         sh.Cells(j, i).Comment.Shape.Height = 200
  52.                     End If
  53.                 Next i
  54.             Next j
  55.         End If
  56.     Next sh
  57.     Application.DisplayAlerts = True
  58.     Application.ScreenUpdating = True
  59. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2024-9-3 12:51 | 显示全部楼层
供参考。。。。。

宿舍综合分布图(24-25学年第一学期).zip

314.34 KB, 下载次数: 18

TA的精华主题

TA的得分主题

发表于 2024-9-3 12:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
完成了。。。

宿舍综合分布图(24-25学年第一学期).rar

203.3 KB, 下载次数: 30

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-3 14:44 | 显示全部楼层
liulang0808 发表于 2024-9-3 12:51
供参考。。。。。

QQ截图20240903144230.png

批注那里,同一个宿舍,有两个班的,是否可以第二个班跟第一个班的数据,分隔一行

点评

可以,修改提取数据部分的代码即可  发表于 2024-9-3 20:10
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 22:22 , Processed in 0.037469 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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