Excel精英培训网

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

[已解决]如何用数组等来改代码,提高运行速度

[复制链接]
发表于 2012-8-19 01:42 | 显示全部楼层 |阅读模式
本帖最后由 ls 于 2012-8-19 14:04 编辑

想达到2个目的

1.如何将12个表的数据放入数组中,每个表 1-6列先放数组中 然后7-12放数组中,代码如何写

2.如何提高下面代码运算速度
查找区域用数组表示.rar (25.68 KB, 下载次数: 20)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-8-19 07:54 | 显示全部楼层
我什么时候能够看懂上面的代码啊?好远。。。
回复

使用道具 举报

发表于 2012-8-19 08:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 柳如烟 于 2012-8-19 08:10 编辑

  1. Sub 提取部份02()
  2.     Dim s As String
  3.     Dim k As Byte, j As Long, i As Long, c As Integer
  4.     Dim a, arr()
  5.     s = Application.InputBox("请输入查找内容", "查找")
  6.     Application.ScreenUpdating = False
  7.     For k = 1 To Sheets.Count - 1
  8.         a = Sheets(k).Range("a5:l" & Sheets(k).UsedRange.Rows.Count)
  9.         For i = 1 To UBound(a)
  10.             If a(i, 3) Like "*" & s & "*" Then
  11.                 j = j + 1
  12.                 ReDim Preserve arr(1 To 6, 1 To j)
  13.                 For c = 1 To 6
  14.                     arr(c, j) = a(i, c)
  15.                 Next
  16.             End If
  17.         Next
  18.         For i = 1 To UBound(a)
  19.             If a(i, 9) Like "*" & s & "*" Then
  20.                 j = j + 1
  21.                 ReDim Preserve arr(1 To 6, 1 To j)
  22.                 For c = 1 To 6
  23.                     arr(c, j) = a(i, c + 6)
  24.                 Next
  25.             End If
  26.         Next
  27.     Next
  28.     With Sheets(Sheets.Count)
  29.         .Rows("2:10000").ClearContents
  30.         .Range("b:b").NumberFormatLocal = "yyyy-m-d"
  31.         .Range("a2").Resize(j, 6) = Application.Transpose(arr)
  32.         MsgBox "数据已复制!"
  33.         .Select
  34.     End With
  35.     Application.ScreenUpdating = True
  36. End Sub
复制代码

查找区域用数组表示.rar

35.86 KB, 下载次数: 20

评分

参与人数 2 +28 金币 +10 收起 理由
windimi007 + 18 果然是高手哈!
JLxiangwei + 10 + 10 很给力!,跟着学习

查看全部评分

回复

使用道具 举报

发表于 2012-8-19 08:23 | 显示全部楼层
美女真棒!
等看第一问了
回复

使用道具 举报

发表于 2012-8-19 09:03 | 显示全部楼层
宫主 美女的代码里就有第一问的解答  她是一个代码解决两个问题了  呵呵
回复

使用道具 举报

发表于 2012-8-19 10:32 | 显示全部楼层
本帖最后由 zjdh 于 2012-8-20 07:34 编辑

可以简化一下:
Sub 提取部份03()
    Dim s$, k%, j%, i&, c%, L%, a, arr()
    s = Application.InputBox("请输入查找内容", "查找")
    If s = False Then Exit Sub   '处理对话框取消
    Application.ScreenUpdating = False
    For k = 1 To Sheets.Count - 1
        a = Sheets(k).Range("a5:l" & Sheets(k).UsedRange.Rows.Count)
        For i = 1 To UBound(a)
            For L = 0 To 1
                If a(i, L * 6 + 3) Like "*" & s & "*" Then
                    j = j + 1
                    ReDim Preserve arr(1 To 6, 1 To j)
                    For c = 1 To 6
                        arr(c, j) = a(i, c + 6 * L)
                    Next
                End If
            Next L, i, k
    Rows("2:10000").ClearContents
    Range("b:b").NumberFormatLocal = "yyyy-m-d"
    Range("a2").Resize(j, 6) = Application.Transpose(arr)
    MsgBox "数据已复制!"
    Application.ScreenUpdating = True
End Sub
查找区域用数组表示.rar (19.28 KB, 下载次数: 8)
回复

使用道具 举报

发表于 2012-8-19 10:40 | 显示全部楼层
zjdh 发表于 2012-8-19 10:32
可以简化一下: Sub 提取部份03()
    Dim s$, k%, j%, i&, c%, L%, a, arr()
    s = Application.Input ...

还能再提速不
另:好象楼主想要的1-6在前7-12在后
回复

使用道具 举报

发表于 2012-8-19 11:54 | 显示全部楼层
上清宫主 发表于 2012-8-19 10:40
还能再提速不
另:好象楼主想要的1-6在前7-12在后

因为楼主要求1~6列在前,7~12列在后,所以只能多循环一次。
回复

使用道具 举报

 楼主| 发表于 2012-8-19 13:59 | 显示全部楼层
本帖最后由 ls 于 2012-8-19 14:03 编辑
柳如烟 发表于 2012-8-19 11:54
因为楼主要求1~6列在前,7~12列在后,所以只能多循环一次。

可以在一起     

只是做模糊查询,把查询到的,复制到最后一表中

回复

使用道具 举报

发表于 2012-8-19 15:25 | 显示全部楼层
ls 发表于 2012-8-19 13:59
可以在一起     

只是做模糊查询,把查询到的,复制到最后一表中

  1. Sub 提取部份02()
  2.     Dim s As String
  3.     Dim k As Byte, j As Long, j1%, i As Long, c As Integer
  4.     Dim a, arr()
  5.     s = Application.InputBox("请输入查找内容", "查找")
  6.     Application.ScreenUpdating = False
  7.     For k = 1 To Sheets.Count - 1
  8.         a = Sheets(k).Range("a5:l" & Sheets(k).UsedRange.Rows.Count)
  9.         For i = 1 To UBound(a)
  10.             If a(i, 3) Like "*" & s & "*" Then
  11.                 j = j + 1
  12.                 ReDim Preserve arr(1 To 12, 1 To j)
  13.                 For c = 1 To 6
  14.                     arr(c, j) = a(i, c)
  15.                 Next
  16.             End If            
  17.             If a(i, 9) Like "*" & s & "*" Then
  18.                 j1 = j1 + 1
  19.                 ReDim Preserve arr(1 To 12, 1 To j1)
  20.                 For c = 7 To 12
  21.                     arr(c, j1) = a(i, c)
  22.                 Next
  23.             End If
  24.         Next
  25.     Next
  26.     With Sheets(Sheets.Count)
  27.         .Rows("2:10000").ClearContents
  28.         .Range("b:b").NumberFormatLocal = "yyyy-m-d"
  29.         .Range("a2").Resize(j, 12) = Application.Transpose(arr)
  30.         MsgBox "数据已复制!"
  31.         .Select
  32.     End With
  33.     Application.ScreenUpdating = True
  34. End Sub
复制代码
结果并排放在了同一个表中
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 05:49 , Processed in 0.170745 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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