ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 见证成长历程---我的答疑解难代码汇总

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-26 20:01 | 显示全部楼层
本帖最后由 lsc900707 于 2017-3-26 22:43 编辑
  1. Sub lsc()
  2. t = Timer
  3. myPath = ThisWorkbook.Path & ""
  4. MyName = Dir(myPath & "*.xls")
  5. Application.ScreenUpdating = False
  6. ReDim brr(1 To 30000, 1 To 3)
  7. Do While MyName <> ""
  8.     If MyName <> ThisWorkbook.Name Then
  9.         n = n + 1
  10.         Set sh = GetObject(myPath & MyName).Sheets(1)
  11.         Arr = sh.[A3].CurrentRegion
  12.         Workbooks(MyName).Close False
  13.         For i = 1 To UBound(Arr)
  14.             m = m + 1
  15.             brr(m, 1) = Arr(i, 15): brr(m, 2) = Arr(i, 16): brr(m, 3) = Arr(i, 17)
  16.         Next
  17.     End If
  18.     MyName = Dir
  19. Loop
  20. Set sh = Nothing
  21. With Sheet1
  22.      .Rows("1:30000").ClearContents
  23.      .Columns(1).NumberFormatLocal = "@"
  24.      .[A1].Resize(m, 3).Value = brr
  25. End With
  26. Application.ScreenUpdating = True
  27. MsgBox "汇总完成!汇总了:" & n & "个工作表;共有:" & m & "行数据。" & vbCr & "用时:" & Format(Timer - t, "0.00") & "秒", vbInformation
  28. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2017-3-26 20:39 | 显示全部楼层

这代码里面很乱呢………………。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-26 21:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jiminyanyan 发表于 2017-3-26 20:39
这代码里面很乱呢………………。

我一贴上代码就是待审核,没看到呢。谢谢你的提醒!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-28 21:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
求助~excel工作表内容自动合并
http://club.excelhome.net/thread-1336926-1-1.html
(出处: ExcelHome技术论坛)
多个空行的多表数据合并也可以这样写:
  1. Sub lsc()
  2.     Dim brr(1 To 2000, 1 To 16)
  3.     bt = Sheets(1).Rows(1)
  4.     For Each sht In Worksheets(Array("四期", "尚", "建发"))
  5.        arr = sht.[a1].CurrentRegion
  6.        For i = 2 To UBound(arr)
  7.            If arr(i, 1) <> "" Then
  8.                 n = n + 1
  9.                 For j = 1 To UBound(arr, 2)
  10.                     brr(n, j) = arr(i, j)
  11.                 Next
  12.             End If
  13.         Next
  14.     Next
  15.     If n = 0 Then
  16.         MsgBox "没有找到有关数据!"
  17.     Else
  18.         With Sheets("汇总")
  19.             .Rows(1) = bt
  20.             .Columns("F:F").NumberFormatLocal = "@"
  21.             .[a2].Resize(n, UBound(arr, 2)) = brr
  22.         End With
  23.     End If
  24. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-29 17:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
费用汇总按月拆分
http://club.excelhome.net/thread-1337096-1-1.html
(出处: ExcelHome技术论坛)
  1. Sub lsc()
  2.   Application.ScreenUpdating = False
  3.   Application.DisplayAlerts = False
  4.   Set d = CreateObject("scripting.dictionary")
  5.   With Sheet1
  6.     arr = .UsedRange
  7.     For i = 2 To UBound(arr)
  8.       s = Month(arr(i, 1))
  9.       If Not d.exists(s) Then
  10.         Set d(s) = .[a1:h1]
  11.       End If
  12.       Set d(s) = Union(d(s), .Cells(i, 1).Resize(1, 8))
  13.     Next
  14.   End With
  15.   For Each sht In Worksheets
  16.     If sht.Name <> "费用汇总" Then
  17.       sht.Delete
  18.     End If
  19.   Next
  20.   For Each c In d.keys
  21.     Set sht = Worksheets.Add(after:=Worksheets(Worksheets.Count))
  22.     With sht
  23.         For j = 1 To UBound(arr, 2)
  24.            .Columns(j).ColumnWidth = Sheet1.Columns(j).ColumnWidth
  25.         Next
  26.        .Name = CStr(c) & "月"
  27.         d(c).Copy .[a1]
  28.     End With
  29.   Next
  30.   Application.ScreenUpdating = True
  31.   Application.DisplayAlerts = True
  32. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-30 17:59 | 显示全部楼层
本帖最后由 lsc900707 于 2017-3-30 18:00 编辑

数据格式问题求助!!!!!!!!!!!!!!
http://club.excelhome.net/thread-1337136-1-1.html
(出处: ExcelHome技术论坛)

Sub lsc()
    Sheet1.UsedRange.Copy
    [a1].PasteSpecial Paste:=xlPasteValues
    For Each Rng In ActiveSheet.UsedRange
         If IsNumeric(Rng) Then
             Range(Rng.Address) = Rng + ""
         End If
    Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-30 18:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一个工作簿内多个指定工作表怎么汇总
http://club.excelhome.net/thread-1337386-1-1.html
(出处: ExcelHome技术论坛)
  1. Sub lsc()
  2.     Application.ScreenUpdating = False
  3.     Set d = CreateObject("scripting.dictionary")
  4.     For Each sht In Sheets
  5.        If sht.Name <> ActiveSheet.Name And sht.Name Like "单体*" Then
  6.            Arr = sht.UsedRange
  7.            For i = 6 To UBound(Arr)
  8.                d(Arr(i, 1)) = d(Arr(i, 1)) + Arr(i, 2)
  9.            Next
  10.         End If
  11.     Next
  12.     [b6].Resize(d.Count) = WorksheetFunction.Transpose(d.items)
  13.     Application.ScreenUpdating = True
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-4 17:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lsc900707 发表于 2017-3-26 15:07
为按钮求代码
http://club.excelhome.net/thread-1336366-1-1.html
(出处: ExcelHome技术论坛)

根据楼主的实际数据,代码修改如下:
  1. Sub 提取农行数据()
  2.     Dim brr(1 To 2000, 1 To 10)
  3.     Application.ScreenUpdating = False
  4.     [a2:j2000].ClearContents
  5.     For Each sht In Worksheets(Array("办公人员TOP", "生产中心办-设备TOP", "仓库TOP", "品质TOP", "织造TOP", "染色TOP", "涂层TOP", "印花TOP"))
  6.         arr = sht.[a1].CurrentRegion
  7.         For i = 4 To UBound(arr) - 1
  8.             If arr(i, 9) = "农行" Then
  9.                 n = n + 1
  10.                 brr(n, 1) = n: brr(n, 2) = arr(i, 2): brr(n, 3) = arr(i, 3): brr(n, 4) = arr(i, 4): brr(n, 5) = arr(i, 5)
  11.                 brr(n, 6) = arr(i, 7): brr(n, 7) = arr(i, 8): brr(n, 8) = arr(i, 9): brr(n, 9) = arr(i, 24): brr(n, 10) = arr(i, 25)
  12.             End If
  13.         Next
  14.     Next
  15.     If n = 0 Then
  16.         MsgBox "没有找到有关信息!"
  17.     Else
  18.         With Sheets("农行")
  19.             .Columns("F:G").NumberFormatLocal = "@"
  20.             .[a2].Resize(n, 10) = brr
  21.         End With
  22.     End If
  23.     Application.ScreenUpdating = False
  24. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-5 20:33 | 显示全部楼层
多条件的高级筛选与汇总代码完善
http://club.excelhome.net/thread-1337759-1-1.html
(出处: ExcelHome技术论坛)
  1. Sub 装配()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. Set dic = CreateObject("Scripting.Dictionary")
  4. myr = Sheets("销售订单明细").Cells(Rows.Count, 2).End(xlUp).Row
  5. arr = Sheets("销售订单明细").Range("a1:l" & myr)
  6. For i = 2 To UBound(arr)
  7.     If arr(i, 4) Like "装配*" Then
  8.         If Not d.exists(arr(i, 5)) Then
  9.             d(arr(i, 5)) = arr(i, 2) & "," & arr(i, 6) & "," & arr(i, 11)
  10.             dic(arr(i, 5)) = dic(arr(i, 5)) + Val(arr(i, 9))
  11.         End If
  12.     End If
  13. Next
  14. Application.DisplayAlerts = False
  15. With Sheets("装配生产主计划")
  16.     .[b5].Resize(d.Count) = Application.Transpose(d.keys)
  17.     .[c5].Resize(d.Count) = Application.Transpose(d.items)
  18.     .[c5].Resize(d.Count).TextToColumns comma:=True
  19.     .[f5].Resize(dic.Count) = Application.Transpose(dic.items)
  20. End With
  21. Application.DisplayAlerts = True
  22. Set d = Nothing
  23. End Sub
  24. Sub 仪器()
  25. Set d = CreateObject("Scripting.Dictionary")
  26. Set dic = CreateObject("Scripting.Dictionary")
  27. myr = Sheets("销售订单明细").Cells(Rows.Count, 2).End(xlUp).Row
  28. arr = Sheets("销售订单明细").Range("a1:l" & myr)
  29. For i = 2 To UBound(arr)
  30.     If arr(i, 4) Like "仪器*" Then
  31.         If Not d.exists(arr(i, 5)) Then
  32.             d(arr(i, 5)) = arr(i, 2) & "," & arr(i, 6) & "," & arr(i, 11)
  33.             dic(arr(i, 5)) = dic(arr(i, 5)) + Val(arr(i, 9))
  34.         End If
  35.     End If
  36. Next
  37. Application.DisplayAlerts = False
  38. With Sheets("仪器生产主计划")
  39.     .[b5].Resize(d.Count) = Application.Transpose(d.keys)
  40.     .[c5].Resize(d.Count) = Application.Transpose(d.items)
  41.     .[c5].Resize(d.Count).TextToColumns comma:=True
  42.     .[f5].Resize(dic.Count) = Application.Transpose(dic.items)
  43. End With
  44. Application.DisplayAlerts = True
  45. Set d = Nothing
  46. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-5 20:34 | 显示全部楼层
本帖最后由 lsc900707 于 2017-4-5 20:39 编辑
将含有特定字符的行显示为红色
http://club.excelhome.net/thread-1338332-1-1.html
(出处: ExcelHome技术论坛)
  1. Sub lsc()
  2.     arr = ActiveSheet.UsedRange
  3.     For i = 3 To UBound(arr)
  4.        If arr(i, 4) Like "*中学*" Or arr(i, 4) Like "*小学*" Then
  5.            Cells(i, 4).Font.ColorIndex = 3
  6.        Else
  7.            Cells(i, 4).Font.ColorIndex = 0
  8.        End If
  9.     Next
  10. End Sub
复制代码


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

本版积分规则

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

GMT+8, 2024-5-2 02:17 , Processed in 0.040001 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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