Excel精英培训网

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

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

[复制链接]
发表于 2013-6-3 08:15 | 显示全部楼层 |阅读模式
筛选出,第3-6个字母之间相同的site对应的角度差绝对值小于20度的记录

附件中含详细的操作步骤,有数据,有例子,有步骤,有例子结果,谢谢大家!

数据 例子,谢谢.rar (19.74 KB, 下载次数: 13)
 楼主| 发表于 2013-6-3 09:14 | 显示全部楼层
本帖最后由 喜气洋洋 于 2014-9-19 11:25 编辑

请问是我表达得不清楚么,我是想筛选出里面相互间夹角小于20度的数据,请大师指点!
回复

使用道具 举报

发表于 2013-6-3 09:48 | 显示全部楼层
  1. Sub test()
  2.     Dim arr, arrResult()
  3.     Dim lRecord As Long
  4.     Dim i As Long
  5.    
  6.     With Sheet2
  7.         arr = .Range("a1").CurrentRegion
  8.     End With
  9.    
  10.     ReDim arrResult(1 To UBound(arr) + 1, 1 To 2)
  11.     arrResult(1, 1) = "site"
  12.     arrResult(1, 2) = "角度差"

  13.     lRecord = 1
  14.     For i = LBound(arr) + 1 To UBound(arr) - 1
  15.         Debug.Print Mid(arr(i, 1), 3, 4), Mid(arr(i + 1, 1), 3, 4), i
  16.         Do While (Mid(arr(i, 1), 3, 4) = Mid(arr(i + 1, 1), 3, 4)) And i < UBound(arr)
  17.             Debug.Print Mid(arr(i, 1), 3, 4), Mid(arr(i + 1, 1), 3, 4), i
  18.             If IsNumeric(arr(i, 3)) And IsNumeric(arr(i + 1, 3)) Then

  19.                 If Abs(arr(i, 3) - arr(i + 1, 3)) <= 20 Then
  20.                     lRecord = lRecord + 1
  21.                     arrResult(lRecord, 1) = arr(i, 1) & "-" & arr(i + 1, 1)
  22.                     arrResult(lRecord, 2) = Abs(arr(i, 3) - arr(i + 1, 3))
  23.                 End If
  24.             End If
  25.             i = i + 1
  26.             If i = 18 Then Exit For
  27.         Loop
  28.         'i = i - 1
  29.     Next
  30.     With Sheet3
  31.         .Range("f1").Resize(lRecord, 2).Value = arrResult
  32.     End With
  33.     MsgBox "整理完成", vbInformation + vbOKOnly

  34. End Sub
复制代码

评分

参与人数 1 +9 收起 理由
ligh1298 + 9 牛人一个!!!

查看全部评分

回复

使用道具 举报

发表于 2013-6-3 09:49 | 显示全部楼层
结果跟你模拟的数据是一样的。
你再多用些数据测测吧。
回复

使用道具 举报

发表于 2013-6-3 09:54 | 显示全部楼层
  1. Sub test()
  2.     Dim arr, arrResult()
  3.     Dim lRecord As Long
  4.     Dim i As Long
  5.    
  6.     '源数据
  7.     With Sheet2
  8.         arr = .Range("a1").CurrentRegion
  9.     End With
  10.    
  11.     '结果数组
  12.     ReDim arrResult(1 To UBound(arr) + 1, 1 To 2)
  13.     arrResult(1, 1) = "site"
  14.     arrResult(1, 2) = "角度差"
  15.    
  16.     '标题占一行
  17.     lRecord = 1
  18.     '数组行循环
  19.     For i = LBound(arr) + 1 To UBound(arr) - 1
  20.         '相同的循环并且要求行值
  21.         Do While (Mid(arr(i, 1), 3, 4) = Mid(arr(i + 1, 1), 3, 4)) And i < UBound(arr) - 1
  22.             '先判断是否是数值,否则不做处理
  23.             If IsNumeric(arr(i, 3)) And IsNumeric(arr(i + 1, 3)) Then
  24.                 '判断绝对值
  25.                 If Abs(arr(i, 3) - arr(i + 1, 3)) <= 20 Then
  26.                     lRecord = lRecord + 1
  27.                     arrResult(lRecord, 1) = arr(i, 1) & "-" & arr(i + 1, 1)
  28.                     arrResult(lRecord, 2) = Abs(arr(i, 3) - arr(i + 1, 3))
  29.                 End If
  30.             End If
  31.             '行号自加1,继续循环
  32.             i = i + 1
  33.         Loop
  34.     Next
  35.    
  36.     With Sheet3
  37.         .Range("f1").Resize(lRecord, 2).Value = arrResult
  38.     End With
  39.     MsgBox "整理完成", vbInformation + vbOKOnly
  40. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
喜气洋洋 + 3 班级管理员辛苦了

查看全部评分

回复

使用道具 举报

发表于 2013-6-3 10:04 | 显示全部楼层
QQ截图20130603100535.jpg
回复

使用道具 举报

 楼主| 发表于 2013-6-3 10:43 | 显示全部楼层
hwc2ycy 发表于 2013-6-3 09:54

嗯嗯,谢谢班级管理员的热心帮忙,我学习一下代码
运行很快,谢谢!
如果将结果修改为,不只是1与2,2与3,3与4。。。之间有对比,1与2,1与3,1与4之间也有对比,如下面的结果:

11.jpg

这样代码应该做怎样的修改呢,谢谢您!

Book11.rar (13.5 KB, 下载次数: 4)
回复

使用道具 举报

发表于 2013-6-3 10:50 | 显示全部楼层
那就是多层循环了。
外面再套一层循环。
回复

使用道具 举报

 楼主| 发表于 2013-6-3 11:41 | 显示全部楼层
hwc2ycy 发表于 2013-6-3 10:50
那就是多层循环了。
外面再套一层循环。

就是 需要先计算每一个 Mid(arr(i, 1), 3, 4) 相同的数量,然后 从1循环到 这个数量么?
回复

使用道具 举报

 楼主| 发表于 2013-6-3 11:49 | 显示全部楼层
hwc2ycy 发表于 2013-6-3 10:50
那就是多层循环了。
外面再套一层循环。

好像没有对  30/110/300 这种形式的数据进行处理
这样,如果是 30/40/300 也不会筛选出来
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 04:44 , Processed in 0.205145 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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