ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-24 16:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
筛选非空的单元格,然后输出为单独的EXCEL文件,感谢大神
http://club.excelhome.net/thread-1329275-1-1.html
(出处: ExcelHome技术论坛)
代码已更改,请再测试效果吧:
Private Sub CommandButton1_Click()
      Dim tim1 As Date, tim2 As Date: tim1 = Timer
      Dim arr, d As Object, sh As Worksheet
      Application.ScreenUpdating = False
      Application.DisplayAlerts = False
      Set d = CreateObject("scripting.dictionary")
      arr = Range("a1:c" & Cells(Rows.Count, 1).End(xlUp).Row)
      For i = 2 To UBound(arr)
          If Cells(i, 2) <> "" Then
              If Not d.exists(arr(i, 1)) Then
                  Set d(arr(i, 1)) = Range("a" & i).Resize(1, 3)
              Else
                  Set d(arr(i, 1)) = Union(d(arr(i, 1)), Range("a" & i).Resize(1, 3))
              End If
          End If
      Next
      x = d.keys
      For k = 0 To UBound(x)
          Set sh = ActiveWorkbook.Sheets.Add(, after:=ActiveSheet)
          sh.Name = x(k)
          d.items()(k).Copy sh.Range("a" & 2)
          Rows("1:1").Copy sh.Range("a1")
          sh.Cells.EntireColumn.AutoFit
      Next
      For Each sh In Worksheets
          If sh.Name <> "Sheet1" Then
              m = m + 1
              If m = 1 Then sh.Select Else sh.Select False
          End If
      Next
      ActiveWindow.SelectedSheets.Move
      ActiveWorkbook.Close True, ThisWorkbook.Path & "\拆分后的表"
      Sheets("Sheet1").Select
      Application.ScreenUpdating = True
      tim2 = Timer
      MsgBox Format(tim2 - tim1, "拆分完成,共耗时:0.00秒"), 64, "时间统计"
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-25 11:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lsc900707 于 2017-2-25 11:21 编辑

http://club.excelhome.net/forum. ... 822&pid=9000011

Sub lsc()
    Dim tim1 As Date, tim2 As Date: tim1 = Timer
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    Dim wb, mypath, myfile
    mypath = ThisWorkbook.Path & "\提取汇总\"
    myfile = Dir(mypath & "*.xls*")
    Do While myfile <> ""
       Set wb = GetObject(mypath & myfile)
       With wb.Sheets("1桩施记")
           .Rows("1:" & .[a65536].End(xlUp).Row).Copy
           Sheets(1).Rows([a65536].End(xlUp).Row + 1).Select
           Selection.PasteSpecial Paste:=xlPasteColumnWidths
           Selection.PasteSpecial Paste:=xlPasteValues
           Selection.PasteSpecial Paste:=xlPasteFormats
      End With
      wb.Close
      myfile = Dir
    Loop
    Set wb = Nothing
    Sheets(1).Rows(1).Delete
    Application.ScreenUpdating = True: Application.DisplayAlerts = True
    tim2 = Timer
    MsgBox Format(tim2 - tim1, "合并完成,耗时:0.00秒"), 64, "温馨提示"
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-26 00:08 | 显示全部楼层
去除时间格式中的日期
http://club.excelhome.net/thread-1329056-1-1.html
(出处: ExcelHome技术论坛)
Sub asds()
    For i = 3 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
        If Cells(i, 1) <> "" And Cells(i, 2) <> "" Then
           Cells(i, 4) = Format(Cells(i, 1), "hh:mm")
           Cells(i, 5) = Format(Cells(i, 2), "hh:mm")
        End If
    Next
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-26 00:09 | 显示全部楼层
请求帮忙!!
http://club.excelhome.net/thread-1330535-1-1.html
(出处: ExcelHome技术论坛)
Private Sub CommandButton1_Click()
    Dim arr, brr(1 To 10000, 1 To 5), w$
    Dim x%, i%, n%, j%
    Dim c As Range
    If ComboBox1.Value = "" Then
        MsgBox "输入错误或空值"
        Exit Sub
    End If
    w = ComboBox1.Value
    With Sheet1
        Set c = .Range("b:b").Find(w, , , xlWhole, , xlPrevious)
        If c Is Nothing Then
            MsgBox "查询人员不存在!"
            ComboBox1.Value = ""
            Exit Sub
        End If
        arr = .Range("a2:i" & .Range("a65536").End(xlUp).Row)
    End With
    For i = 1 To UBound(arr)
        If arr(i, 2) = w Then
            n = n + 1
            brr(n, 1) = arr(i, 1): brr(n, 2) = arr(i, 2): brr(n, 3) = arr(i, 3)
            brr(n, 4) = arr(i, 6): brr(n, 5) = arr(i, 9)
        End If
    Next
    With Sheet3
       .Range("a2:e1000") = ""
       .Range("a2").Resize(n, 5) = brr
    End With
    Sheet3.Activate
    UserForm2.Hide
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-6 01:05 | 显示全部楼层
又一个跨工作表复制数据的问题:
跨工作表提取数据
http://club.excelhome.net/thread-1331561-1-1.html
(出处: ExcelHome技术论坛)

Sub lsc()
     Dim arr
     arr = Sheets("Sheet2").[r2].CurrentRegion.Value
     For i = 1 To UBound(arr)
         If arr(i, 1) <> 0 Then k = k + 1
         For j = 1 To UBound(arr, 2)
             arr(k, j) = arr(i, j)
        Next
     Next
     [a26:c5000].ClearContents
     [a26].Resize(k, UBound(arr, 2)) = arr
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-6 01:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
工作表拆分
http://club.excelhome.net/thread-1332019-1-1.html
(出处: ExcelHome技术论坛)

Sub lsc()
    Dim wbk As Workbook
    Application.ScreenUpdating = False
    With Sheet1
        For i = 1 To .Cells(.Rows.Count, 1).End(3).Row Step 20000
            k = k + 1
            Set wbk = Workbooks.Add
            .Rows(i).Resize(20000).Copy wbk.Sheets(1).[a1]
            wbk.Close True, ThisWorkbook.Path & "\" & k
        Next
    End With
    Set wbk = Nothing
    Application.ScreenUpdating = True
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-6 01:10 | 显示全部楼层
求助如何编制一个宏,将附件Sheet1中“Y”列和“Z”列中小于0的所有数据信息,分别...
http://club.excelhome.net/thread-1332145-1-1.html
(出处: ExcelHome技术论坛)
代码放模块中,按钮放sheet2:
Sub lsc()
    [a9:z5000].ClearContents
    Dim arr, brr
    arr = Sheets("sheet1").UsedRange
    ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
    For i = 9 To UBound(arr)
        If arr(i, 25) < 0 Or arr(i, 26) < 0 Then
            m = m + 1
            For j = 1 To UBound(arr, 2)
                 brr(m, j) = arr(i, j)
            Next
        End If
    Next
    [A9].Resize(m, UBound(arr, 2)) = brr
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-6 01:13 | 显示全部楼层
本帖最后由 lsc900707 于 2017-3-6 07:34 编辑

工作表结构相同的多工作薄能合并成一个工作薄文件吗
http://club.excelhome.net/thread-1331544-1-1.html
(出处: ExcelHome技术论坛)
Sub lsc()
Dim myPath$, MyName$, sh As Worksheet, t#
Dim Arr, brr, i&, j&, m&, n&
t = Timer
myPath = ThisWorkbook.Path & "\"
MyName = Dir(myPath & "*.xls*")
Application.ScreenUpdating = False
ReDim brr(1 To 100000, 1 To 8)
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 = 4 To UBound(Arr)
                   m = m + 1
                   For j = 1 To 8
                        brr(m, j) = Arr(i, j)
                    Next
              Next
      End If
      MyName = Dir
Loop
Set sh = Nothing
With Sheet1
     .Rows("4:10000").ClearContents
     .[a4].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-3-6 07:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不错的分享,顶一个!

TA的精华主题

TA的得分主题

发表于 2017-3-6 09:17 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 22:19 , Processed in 0.037707 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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