Excel精英培训网

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

[已解决]菜鸟求老师帮忙,条件提取数据问题

[复制链接]
发表于 2014-4-8 14:00 | 显示全部楼层 |阅读模式
求老师帮忙
按条件提取数据。
判断条件,把各类条件对应指定列的数据,提取到《汇总表》中。
有很多数据表,拿了2个做例子。
详细的说明在汇总表中。
拜托老师了,万分感谢!


最佳答案
2014-4-8 22:16
………………

按条件提取数据.zip

53.4 KB, 下载次数: 16

发表于 2014-4-8 19:05 | 显示全部楼层
  1. Sub Macro1()
  2. Dim wb As Workbook, mypath$, wj$, i&, s&, s2&, n%
  3. Dim arr, brr(1 To 60000, 1 To 9), crr(1 To 60000, 1 To 9)
  4. Application.ScreenUpdating = False
  5. tj1 = [b1]: tj2 = [b2]
  6. mypath = ThisWorkbook.Path & ""
  7. wj = Dir(mypath & "*.xls")
  8. Do While wj <> ""
  9.     If wj <> ThisWorkbook.Name Then
  10.         Set wb = GetObject(mypath & wj)
  11.         gzb = Split(wb.Name, ".")(0) '工作簿名称
  12.         For i = 1 To wb.Sheets.Count
  13.             sht = wb.Sheets(i).Name '工作表名称
  14.             arr = wb.Sheets(i).Range("a1:ah" & wb.Sheets(i).Range("c65536").End(xlUp).Row)
  15.             For j = 6 To UBound(arr) - 1
  16.                 If arr(j, 16) > tj1 Then
  17.                     s = s + 1
  18.                     brr(s, 1) = arr(j, 16)
  19.                     brr(s, 2) = gzb
  20.                     brr(s, 3) = sht
  21.                     n = 4
  22.                     For k = 25 To UBound(arr, 2)
  23.                         If arr(j + 1, k) = "" Then
  24.                             n = n + 1
  25.                             brr(s, n) = arr(1, k)
  26.                        End If
  27.                     Next
  28.                 End If
  29.                 If arr(j, 17) > tj2 Then
  30.                     s2 = s2 + 1
  31.                     crr(s2, 1) = arr(j, 17)
  32.                     crr(s2, 2) = gzb
  33.                     crr(s2, 3) = sht
  34.                     crr(s2, 5) = arr(j + 1, 3)
  35.                     crr(s2, 6) = arr(j + 1, 13)
  36.                     crr(s2, 7) = arr(j + 1, 14)
  37.                 End If
  38.             Next
  39.         Next
  40.         wb.Close 0
  41.     End If
  42.     wj = Dir
  43. Loop
  44. Sheet2.Range("a2").Resize(s, UBound(brr, 2)) = brr
  45. Sheet3.Range("a2").Resize(s2, UBound(crr, 2)) = crr
  46. Application.ScreenUpdating = True
  47. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
红雨001 + 1 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2014-4-8 19:07 | 显示全部楼层
本帖最后由 dsmch 于 2014-4-8 19:29 编辑

………………

新建文件夹.zip

27.21 KB, 下载次数: 6

回复

使用道具 举报

 楼主| 发表于 2014-4-8 19:40 | 显示全部楼层
谢谢!各位老师,我先看看。
回复

使用道具 举报

 楼主| 发表于 2014-4-8 21:14 | 显示全部楼层
dsmch 发表于 2014-4-8 19:07
………………

你好。先感谢,感谢!

只是需要提前一行的数据,不是提取整个表格满足条件的数据。例如提取第17行的数据,条件在16行 。

所以,还需要一个录入窗口,录入单元格A17的数字 ‘112’,然后开始执行。

再例如提取第16行的数据,条件在15行 . 录入单元格A16的数字 ‘111,然后开始执行

回复

使用道具 举报

发表于 2014-4-8 22:16 | 显示全部楼层    本楼为最佳答案   
………………

新建文件夹.zip

29.69 KB, 下载次数: 13

评分

参与人数 1 +1 收起 理由
红雨001 + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-4-8 22:46 | 显示全部楼层
dsmch 发表于 2014-4-8 22:16
………………

你好,只能提取第17行的(输入112)
其它行不能算。例如提取16行的,输入111,出错,报‘应用程序定义或对象定义错误’。
回复

使用道具 举报

发表于 2014-4-8 22:51 | 显示全部楼层
红雨001 发表于 2014-4-8 22:46
你好,只能提取第17行的(输入112)
其它行不能算。例如提取16行的,输入111,出错,报‘应用程序定义或 ...

你的解释没看明白,条件1大于6,6出在哪里?
第16行对应的条件1,没有满足条件的结果。
回复

使用道具 举报

 楼主| 发表于 2014-4-8 23:01 | 显示全部楼层
dsmch 发表于 2014-4-8 22:51
你的解释没看明白,条件1大于6,6出在哪里?
第16行对应的条件1,没有满足条件的结果。

如果没有满足条件的不输出。
条件1,要提前的数是范围Y到AH列的

我看了下,按条件1,如果提取第16行,则是  判断P15是否大于6.  工作簿A1的 工作表B,P15=8,那就提取‘6 7 8’
回复

使用道具 举报

 楼主| 发表于 2014-4-8 23:04 | 显示全部楼层
dsmch 发表于 2014-4-8 22:51
你的解释没看明白,条件1大于6,6出在哪里?
第16行对应的条件1,没有满足条件的结果。

你的解释没看明白,条件1大于6,6出在哪里

---  6就是设定的一个判断值,没有出在哪里。如果必要,那可以找个辅助单元格,写上‘6’。
呵呵
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 17:01 , Processed in 0.329832 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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