Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 喜气洋洋

[已解决]请教一个数据筛选的例子,谢谢!

[复制链接]
发表于 2013-6-3 16:23 | 显示全部楼层
循环嵌套多了,不过针对第二种方法,原来就需要2次循环,像你带/的号,也要多种情况,考虑到上下,前后,4层差不多,但很多实现,第3层循环只跑一次。
回复

使用道具 举报

发表于 2013-6-3 16:29 | 显示全部楼层
写了这么多,你可别忘了给最佳呀。累死我了。

评分

参与人数 1 +3 收起 理由
喜气洋洋 + 3 肯定是最佳答案

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-6-3 17:23 | 显示全部楼层
hwc2ycy 发表于 2013-6-3 16:29
写了这么多,你可别忘了给最佳呀。累死我了。

绝对的最佳 真心感谢你

不过 运行到

ReDim arrResult(1 To (UBound(arr) + LBound(arr)) * UBound(arr) / 2 + 1, 1 To 2)

提示“内存溢出”,不知道为啥,求大师指点。
回复

使用道具 举报

发表于 2013-6-3 18:01 | 显示全部楼层
你暂停后看看,ARR的类型,在本地窗口里。
你的数据量很大还是?

评分

参与人数 1 +3 收起 理由
喜气洋洋 + 3 数据是6000多条

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-6-3 21:04 | 显示全部楼层
hwc2ycy 发表于 2013-6-3 18:01
你暂停后看看,ARR的类型,在本地窗口里。
你的数据量很大还是?

数据是6000多条
有的电脑能运行 有的电脑提示内存溢出
内存 都是2G的


Book11.rar (148.75 KB, 下载次数: 2)
回复

使用道具 举报

发表于 2013-6-3 21:05 | 显示全部楼层
版本呢?
这种情况我以前有同学也碰到过。

评分

参与人数 1 +3 收起 理由
喜气洋洋 + 3 大师 求指点

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-6-3 21:07 | 显示全部楼层
hwc2ycy 发表于 2013-6-3 21:05
版本呢?
这种情况我以前有同学也碰到过。

我的是07版本的 可以运行
有几台是07版本的 不能运行
有个台式机 10版本的 也不能运行
总之 除了我的电脑 其他都是提示内存溢出
回复

使用道具 举报

发表于 2013-6-3 21:12 | 显示全部楼层
数组换成静态的。
6000*6000/2,数组大小36000000/2,这个数组确实有点大了。
  1. Sub 同一基站方向小于20度()
  2. '匹配数字
  3.     Dim arr, arrResult(1 To 655535, 1 To 2)
  4.     Dim lRecord As Long
  5.     Dim i As Long, j As Long
  6.     Dim str1 As String
  7.     Dim lAbs As Long

  8.     Dim objRegExp1 As Object, objRegExp2 As Object
  9.     Dim item1, item2
  10.     Set objRegExp1 = CreateObject("VBScript.regExp")
  11.     Set objRegExp2 = CreateObject("VBScript.regExp")

  12.     With objRegExp1
  13.         .Global = True
  14.         .Pattern = "\d+"
  15.     End With

  16.     With objRegExp2
  17.         .Global = True
  18.         .Pattern = "\d+"
  19.     End With


  20.     '源数据
  21.     With Sheet2
  22.         arr = .Range("a1").CurrentRegion
  23.     End With

  24.     '结果数组
  25.     'ReDim arrResult(1 To 655535, 1 To 2)
  26.     arrResult(1, 1) = "site"
  27.     arrResult(1, 2) = "角度差"

  28.     '标题占一行
  29.     lRecord = 1
  30.     '数组行循环
  31.     For i = LBound(arr) + 1 To UBound(arr) - 1
  32.         str1 = Mid(arr(i, 1), 3, 4)
  33.         For j = i + 1 To UBound(arr)
  34.             '相同的循环并且要求行值
  35.             If (str1 = Mid(arr(j, 1), 3, 4)) Then
  36.                 For Each item1 In objRegExp1.Execute(arr(i, 3))
  37.                     For Each item2 In objRegExp2.Execute(arr(j, 3))
  38.                         lAbs = Abs(Val(item1) - Val(item2))
  39.                         If lAbs <= 20 Then
  40.                             lRecord = lRecord + 1
  41.                             arrResult(lRecord, 1) = arr(i, 1) & "-" & arr(j, 1)
  42.                             arrResult(lRecord, 2) = lAbs
  43.                         End If
  44.                     Next
  45.                 Next
  46.             End If
  47.         Next
  48.     Next

  49.     With Sheet3
  50.         .Range("f1").Resize(lRecord, 2).Value = arrResult
  51.     End With
  52.     MsgBox "整理完成", vbInformation + vbOKOnly
  53. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
喜气洋洋 + 3 赞一个! 辛苦了

查看全部评分

回复

使用道具 举报

发表于 2013-6-3 21:13 | 显示全部楼层
结果下来,也只有1000多行数据,
回复

使用道具 举报

 楼主| 发表于 2013-6-3 21:20 | 显示全部楼层
hwc2ycy 发表于 2013-6-3 21:13
结果下来,也只有1000多行数据,

我在想 是不是 将条件扩展到 1-6个字母相同的时候 才比较 就可以减少一半的对比了
我手工做了一下 才200多条 这样 就40000多 应该每台电脑都可以出来了
36000000 为什么你电脑能运行 他们电脑不行。。。
将我的分 都奖励给你先  {:1112:}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 03:03 , Processed in 0.317603 second(s), 17 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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