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-4-11 17:08 | 显示全部楼层
wherecoor 发表于 2017-4-11 09:20
汇总内容从f列开始,代码识别a列的文件名

126楼的代码也修改好了:
Sub lsc()
   t = Timer
   mypath = ThisWorkbook.Path & "\"
   myname = Dir(mypath & "*.xls*")
   Application.ScreenUpdating = False
   crr = [a1].CurrentRegion
   ReDim brr(1 To 3000, 1 To 5)
   Do While myname <> ""
       For k = 2 To UBound(crr)
           If Split(myname, ".")(0) = Mid(crr(k, 1), 5, 2) And myname <> ThisWorkbook.Name Then
               n = n + 1
               Set sh = GetObject(mypath & myname).Sheets("Sheet1")
               Arr = sh.[a1].CurrentRegion
               Workbooks(myname).Close False
               For i = 2 To UBound(Arr)
                   m = m + 1
                   For j = 1 To UBound(Arr, 2)
                       brr(m, j) = Arr(i, j)
                   Next
               Next
           End If
        Next
        myname = Dir
   Loop
   Set sh = Nothing
   With ActiveSheet
       .[f1:j3000].ClearContents
       .[f1].Resize(1, UBound(Arr, 2)).Value = Arr
       .[f2].Resize(m, UBound(brr, 2)).Value = brr
   End With
   Application.ScreenUpdating = True
   MsgBox "汇总完成!汇总了:" & n & "个工作表;共有:" & m & "行数据 " & vbCr & "用时:" & Format(Timer - t, "0.00") & "秒", vbInformation
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-15 08:17 | 显示全部楼层
本帖最后由 lsc900707 于 2017-4-15 08:21 编辑

数据查询VBA实现(数据量大情况下实现VLOOKUP函数功能提高速度)
http://club.excelhome.net/thread-1340384-1-1.html
(出处: ExcelHome技术论坛)
Sub lsc()
     Set d = CreateObject("Scripting.Dictionary")
     arr = Sheet1.[a4].CurrentRegion
     For i = 2 To UBound(arr)
         d(arr(i, 1)) = arr(i, 2)
     Next
     brr = ActiveSheet.[a4].CurrentRegion
     For i = 2 To UBound(brr)
         brr(i, 2) = d(brr(i, 1))
     Next
     [a4].Resize(UBound(brr), UBound(brr, 2)) = brr
End Sub
另一个网友的提问:
Sub lsc()
    Set d = CreateObject("Scripting.Dictionary")
    arr = Sheet1.[a4].CurrentRegion
    For i = 2 To UBound(arr)
        d(arr(i, 1)) = arr(i, 3)
    Next
    brr = ActiveSheet.[a4].CurrentRegion
    For i = 2 To UBound(brr)
        brr(i, 2) = d(brr(i, 1))
    Next
    [a4].Resize(UBound(brr), UBound(brr, 2)) = brr
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-15 08:23 | 显示全部楼层
满足两条件提取文本
http://club.excelhome.net/thread-1340377-1-1.html
(出处: ExcelHome技术论坛)
Sub lsc()
    Set d = CreateObject("Scripting.Dictionary")
    Range("a3:a" & [a65536].End(3).Row).ClearContents
    Arr = Sheet1.[a1].CurrentRegion
    For i = 2 To UBound(Arr)
       d(Arr(i, 3)) = Arr(i, 1) & "," & Arr(i, 2)
    Next
    Brr = Range("a3:c" & [c65536].End(3).Row)
    For i = 1 To UBound(Brr)
        If d.exists(Brr(i, 3)) Then Cells(i + 2, 1) = Split(d(Brr(i, 3)), ",")(0)
    Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-15 09:19 | 显示全部楼层
请问如何实现下面的内容
http://club.excelhome.net/thread-1340353-1-1.html
(出处: ExcelHome技术论坛)
  1. Sub lsc()
  2.     Set d = CreateObject("Scripting.Dictionary")
  3.     arr = Sheet2.[a1].CurrentRegion
  4.     For i = 1 To UBound(arr)
  5.         d(arr(i, 1)) = arr(i, 2)
  6.     Next
  7.     brr = ActiveSheet.[a1].CurrentRegion
  8.     For i = 5 To UBound(brr)
  9.         brr(i, 2) = d(brr(i, 1))
  10.     Next
  11.     [a1].Resize(UBound(brr), UBound(brr, 2)) = brr
  12. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-16 11:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
求助自动查找合计行计算当前合计
http://club.excelhome.net/thread-1339974-1-1.html
(出处: ExcelHome技术论坛)
  1. Sub lsc()
  2.     On Error Resume Next
  3.     arr = ActiveSheet.Range("A1:G" & Cells(65536, 1).End(3).Row)
  4.     For i = 3 To UBound(arr)
  5.         If arr(i, 1) <> "合计" And arr(i, 6) <> "" Then
  6.             a = a + arr(i, 6)
  7.         End If
  8.         If arr(i, 1) = "合计" Then
  9.             Cells(i, 6) = a
  10.             a = 0
  11.         End If
  12.     Next
  13. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-20 20:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub 拆分为工作表()
  2. Application.ScreenUpdating = False
  3. Application.DisplayAlerts = False
  4. For Each sh In Worksheets
  5. If sh.Name <> "模板" And sh.Name <> "Sheet1" Then sh.Delete
  6. Next
  7. Sheet1.Range("A2:G" & Sheet1.Range("B65536").End(xlUp).Row).Sort Key1:=Range("B1"), Order1:=xlAscending
  8. n = 2
  9.     With ThisWorkbook.Sheets("Sheet1")
  10.         For Each b In .Range("B2:B" & .Range("B65536").End(xlUp).Row)
  11.             u = b.Row
  12.             If b <> b.Offset(1, 0) Then
  13.             Sheets("模板").Copy After:=Sheets(Worksheets.Count)
  14.                 .Rows(n & ":" & u).Copy Sheets(Sheets.Count).Range("a4")
  15.                 Sheets(Sheets.Count).Name = Format(b, "m月d日")
  16.                  n = u + 1
  17.             End If
  18.         Next
  19.     End With
  20.     For Each sh In Sheets
  21.         If sh.Name <> "模板" And sh.Name <> "Sheet1" Then
  22.            With sh
  23.               k = .Range("a65536").End(xlUp).Row
  24.               arr = .UsedRange
  25.               For i = 4 To UBound(arr)
  26.                   For j = 5 To UBound(arr, 2)
  27.                      If IsNumeric(.Cells(i, j)) Then
  28.                          .Cells(k - 3, j) = Application.Sum(Application.Index(arr, , j))
  29.                      End If
  30.                   Next
  31.               Next
  32.             End With
  33.         End If
  34.     Next
  35. Application.ScreenUpdating = True
  36. Application.DisplayAlerts = True
  37. End Sub
复制代码

请教各位老师,根据总表按日期拆分明细表
http://club.excelhome.net/thread-1340564-1-1.html
(出处: ExcelHome技术论坛)

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-20 20:18 | 显示全部楼层
满足条件批量提取的VBA代码
http://club.excelhome.net/thread-1341263-1-1.html
(出处: ExcelHome技术论坛)
  1. Sub lsc()
  2.     Dim brr(1 To 10000, 1 To 10)
  3.     Application.ScreenUpdating = False
  4.     arr = Sheet3.[b2].CurrentRegion
  5.     For i = 2 To UBound(arr)
  6.         If arr(i, 13) Like "*没到货*" Then
  7.              m = m + 1
  8.              brr(m, 2) = arr(i, 1): brr(m, 4) = arr(i, 2)
  9.              brr(m, 9) = arr(i, 10): brr(m, 10) = arr(i, 3)
  10.          End If
  11.     Next
  12.     If m = 0 Then
  13.         MsgBox "没有找到有关信息!"
  14.     Else
  15.         With ActiveSheet
  16.             .[a3].Resize(m, 10) = brr
  17.         End With
  18.     End If
  19.     Application.ScreenUpdating = True
  20. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-20 20:22 | 显示全部楼层
多表汇总
http://club.excelhome.net/thread-1341216-1-1.html
(出处: ExcelHome技术论坛)
Sub lsc()
    t = Timer
    myPath = ThisWorkbook.Path & "\"
    MyName = Dir(myPath & "*.xls*")
    Application.ScreenUpdating = False
    ReDim brr(1 To 100000, 1 To 3)
    Do While MyName <> ""
        If MyName <> ThisWorkbook.Name Then
            n = n + 1
            Set sh = GetObject(myPath & MyName).Sheets("Sheet1")
            Arr = sh.[A1].CurrentRegion
            Workbooks(MyName).Close False
            For i = 2 To UBound(Arr)
                m = m + 1
                For j = 1 To 3
                    brr(m, j) = Arr(i, j)
                Next
           Next
        End If
        MyName = Dir
    Loop
    Set sh = Nothing
    With ActiveSheet
        .Rows("1:30000").ClearContents
        .[A1].Resize(1, UBound(Arr, 2)).Value = Arr
        .[a2].Resize(m, UBound(brr, 2)).Value = brr
    End With
    Application.ScreenUpdating = True
    MsgBox "汇总完成!汇总了:" & n & "个工作表;共有:" & m & "行数据。" & vbCr & "用时:" & Format(Timer - t, "0.00") & "秒", vbInformation
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-20 20:24 | 显示全部楼层
有3个IF公式求助用VBA代码代替实现
http://club.excelhome.net/thread-1341434-1-1.html
(出处: ExcelHome技术论坛)
  1. Sub lsc()
  2.     Set d = CreateObject("Scripting.Dictionary")
  3.     [G2:G1000].ClearContents
  4.     Arr = Sheet3.[a1].CurrentRegion
  5.     For i = 2 To UBound(Arr)
  6.         d(Arr(i, 1)) = Arr(i, 2)
  7.     Next
  8.     Brr = [a1].CurrentRegion
  9.     For i = 2 To UBound(Brr)
  10.          If d.exists(Brr(i, 6)) Then Cells(i, 7) = d(Brr(i, 6))
  11.          If Cells(i, 1) <> "" Then Cells(i, 2) = "MRWSA" & Format(Cells(i, 1).Row - 1, "0000")
  12.          If Cells(i, 9) <> "" Then Cells(i, 13) = Cells(i, 8) / Cells(i, 9)
  13.     Next
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2017-4-21 14:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
大哥:你真的好历害
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-2 01:04 , Processed in 0.041643 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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