Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1497|回复: 7

[已解决]筛选数据并分别复制粘贴到新建的工作表中,帮忙写下VBA代码,谢谢!

[复制链接]
发表于 2022-4-11 15:17 | 显示全部楼层 |阅读模式
根据E列“子编号”筛选数据并分别复制粘贴到后面的自动新建的工作表中(第6行开始粘贴),工作表以筛选的子编号命名,另外H列“分类”以Z-A重新扩展排序。(示例文件的后面5个工作表为执行后的效果)
帮忙写下VBA代码,非常感谢!
清单示例.zip (33.14 KB, 下载次数: 15)
发表于 2022-4-11 16:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 lisachen 于 2022-4-11 16:39 编辑

复制代码
  1. Sub test()

  2.    
  3.    
  4.     Dim arr, brr, resultArr(1 To 1000, 1 To 26)
  5.     Dim dic As Object
  6.     Dim x%, y%, k%
  7.     Set dic = CreateObject("scripting.dictionary")
  8.     arr = Sheets("export").Range("a1").CurrentRegion
  9.     brr = Sheets("export").Range("a1:w1")
  10.     For x = 2 To UBound(arr)
  11.         If Not dic.exists(arr(x, 5)) Then
  12.             dic(arr(x, 5)) = 1
  13.         End If
  14.     Next x
  15.     For Each Item In dic
  16.         For x = 2 To UBound(arr)
  17.             If arr(x, 5) = Item Then
  18.                 k = k + 1
  19.                 For y = 1 To UBound(arr, 2)
  20.                     resultArr(k, y) = arr(x, y)
  21.                 Next y
  22.             End If
  23.         Next x
  24.         With Sheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count))
  25.             .Name = Item
  26.             .Range("a6").Resize(1, 23) = brr
  27.             .Range("a7").Resize(k, 23) = resultArr
  28.         End With
  29.         k = 0
  30.         Erase resultArr
  31.     Next
  32. End Sub
复制代码

回复

使用道具 举报

发表于 2022-4-11 16:33 | 显示全部楼层

增加了H列降序排序

本帖最后由 lisachen 于 2022-4-11 16:55 编辑

清单示例.rar (45.48 KB, 下载次数: 4)

清单示例.rar

45.48 KB, 下载次数: 7

回复

使用道具 举报

 楼主| 发表于 2022-4-11 17:17 | 显示全部楼层
本帖最后由 baojun026 于 2022-4-11 17:18 编辑

QQ图片20220411171636.png
回复

使用道具 举报

 楼主| 发表于 2022-4-11 17:17 | 显示全部楼层

师傅,我有个地方漏描述了,有点搞不懂帮忙再补充一下,非常感谢!
筛选过去的每个新表增加B1=B7,B2=C7,B3=E7,B4=F8,B5=V7。代码要怎么修改?帮忙看看,谢谢了!

回复

使用道具 举报

发表于 2022-4-11 17:18 | 显示全部楼层
本帖最后由 釜底抽薪 于 2022-4-11 17:19 编辑

我用文件筛选功能写了个 只是排序问题还解决
Sub chafei()
    Dim sht As Worksheet
    Dim d As Object
    Dim i As Integer, ar As Variant
    Set d = CreateObject("scripting.dictionary")
    With Worksheets("export")
        If .AutoFilterMode = True Then Selection.AutoFilter
        ar = .Range("e2:e" & .Cells(Rows.Count, 5).End(xlUp).Row)
    End With
    For i = 1 To UBound(ar)
        On Error Resume Next
        d.Add ar(i, 1), ""
    Next i
    With Worksheets("export")
    For i = 1 To d.Count
        myn = Application.Index(d.Keys, 0, i)
        myn = myn(UBound(myn))
        .Rows("1:1").AutoFilter field:=5, Criteria1:=myn
        .AutoFilter.Range.SpecialCells(12).Copy
        Set sht = Worksheets.Add(, Worksheets(Worksheets.Count))
        sht.Name = myn
        sht.Range("a6").PasteSpecial
        .Select
        Selection.AutoFilter
    Next i
    End With
End Sub
回复

使用道具 举报

发表于 2022-4-11 17:31 | 显示全部楼层
baojun026 发表于 2022-4-11 17:17
师傅,我有个地方漏描述了,有点搞不懂帮忙再补充一下,非常感谢!
筛选过去的每个新表增加B1=B7,B2=C7 ...
  1. Sub test()
  2.     Dim arr, brr, resultArr(1 To 1000, 1 To 26)
  3.     Dim dic As Object
  4.     Dim x%, y%, k%
  5.     Set dic = CreateObject("scripting.dictionary")
  6.     arr = Sheets("export").Range("a1").CurrentRegion
  7.     brr = Sheets("export").Range("a1:w1")
  8.     For x = 2 To UBound(arr)
  9.         If Not dic.exists(arr(x, 5)) Then
  10.             dic(arr(x, 5)) = 1
  11.         End If
  12.     Next x
  13.     For Each Item In dic
  14.         For x = 2 To UBound(arr)
  15.             If arr(x, 5) = Item Then
  16.                 k = k + 1
  17.                 For y = 1 To UBound(arr, 2)
  18.                     resultArr(k, y) = arr(x, y)
  19.                 Next y
  20.             End If
  21.         Next x
  22.         For x = 1 To UBound(resultArr) - 1
  23.         For y = x + 1 To UBound(resultArr)
  24.             If resultArr(x, 8) < resultArr(y, 8) Then
  25.                 For j = 1 To 23
  26.                 temp = resultArr(x, j)
  27.                 resultArr(x, j) = resultArr(y, j)
  28.                 resultArr(y, j) = temp
  29.                 Next j
  30.             End If
  31.         Next y
  32.     Next x
  33.         With Sheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count))
  34.             .Name = Item
  35.             .Range("a6").Resize(1, 23) = brr
  36.             .Range("a7").Resize(k, 23) = resultArr
  37.             .[B1] = .[B7]
  38.             .[B2] = .[C7]
  39.             .[B3] = .[E7]
  40.             .[B4] = .[F7]
  41.             .[B5] = .[V7]
  42.         End With
  43.         k = 0
  44.         Erase resultArr
  45.     Next
  46. End Sub
复制代码
            .[B1] = .[B7]
            .[B2] = .[C7]
            .[B3] = .[E7]
            .[B4] = .[F7]
            .[B5] = .[V7]


回复

使用道具 举报

 楼主| 发表于 2022-4-11 17:34 | 显示全部楼层
lisachen 发表于 2022-4-11 17:31
. = .
            . = .[C7]
            . = .[E7]

OK,非常感谢!
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-30 17:54 , Processed in 0.510373 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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