Excel精英培训网

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

[已解决]提取所需要的条件数据

[复制链接]
发表于 2014-1-19 20:27 | 显示全部楼层 |阅读模式
提取所需要的条件数据
最佳答案
2014-1-20 16:10
本帖最后由 大灰狼1976 于 2014-1-20 16:19 编辑

附件请测试。
顺便说明一下,你的说明里有两处错误:
1、比值=7,提取2011数据,而不是2010数据(附件已改过)
2、2011-2002 *=15,这里应该*=16
  1. Private Sub CommandButton1_Click()
  2. Dim arr, i&, j&, n&, m&, m1&, d As Object, c
  3. Set d = CreateObject("scripting.dictionary")
  4. For i = 2 To [a65536].End(3).Row
  5.   n = Left(Cells(i, 1), 4)
  6.   If Not d.exists(n) Then d(n) = Range(Columns(1).Find(n, lookat:=xlPart, SearchDirection:=xlPrevious), Columns(1).Find(n, lookat:=xlPart)).Resize(, 3)
  7. Next i
  8. For j = 4 To 2 Step -1
  9.   m = 0: m1 = 0
  10.   n = Application.Large(d.keys, j)
  11.   For Each c In d.keys
  12.     If c <= n Then
  13.       For i = 1 To UBound(d(c))
  14.         If d(c)(i, 2) = "*" Then m = m + 1 Else m1 = m1 + 1
  15.       Next i
  16.     End If
  17.   Next c
  18.   n = Application.Large(d.keys, j - 1)
  19.   If m / m1 >= 6 Then [f65536].End(3).Offset(1).Resize(UBound(d(n)), 3) = d(n)
  20. Next j
  21. End Sub
复制代码

8989.zip

3.1 KB, 下载次数: 12

发表于 2014-1-20 16:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 大灰狼1976 于 2014-1-20 16:19 编辑

附件请测试。
顺便说明一下,你的说明里有两处错误:
1、比值=7,提取2011数据,而不是2010数据(附件已改过)
2、2011-2002 *=15,这里应该*=16
  1. Private Sub CommandButton1_Click()
  2. Dim arr, i&, j&, n&, m&, m1&, d As Object, c
  3. Set d = CreateObject("scripting.dictionary")
  4. For i = 2 To [a65536].End(3).Row
  5.   n = Left(Cells(i, 1), 4)
  6.   If Not d.exists(n) Then d(n) = Range(Columns(1).Find(n, lookat:=xlPart, SearchDirection:=xlPrevious), Columns(1).Find(n, lookat:=xlPart)).Resize(, 3)
  7. Next i
  8. For j = 4 To 2 Step -1
  9.   m = 0: m1 = 0
  10.   n = Application.Large(d.keys, j)
  11.   For Each c In d.keys
  12.     If c <= n Then
  13.       For i = 1 To UBound(d(c))
  14.         If d(c)(i, 2) = "*" Then m = m + 1 Else m1 = m1 + 1
  15.       Next i
  16.     End If
  17.   Next c
  18.   n = Application.Large(d.keys, j - 1)
  19.   If m / m1 >= 6 Then [f65536].End(3).Offset(1).Resize(UBound(d(n)), 3) = d(n)
  20. Next j
  21. End Sub
复制代码

8989.zip

11.69 KB, 下载次数: 10

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 15:30 , Processed in 0.209990 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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