Excel精英培训网

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

[已解决]数据筛选对应

[复制链接]
发表于 2014-6-28 20:19 | 显示全部楼层 |阅读模式
本帖最后由 fan3031 于 2014-6-29 16:01 编辑

两组数据(实际会在不同的sheet中),筛选相同,并拷贝至对应位置,内有VBA,但效果很差,想提高效率,请大家帮忙!!

第一个文件已由“十五的月亮解决”,请看第二个文件,谢谢!
最佳答案
2014-6-28 22:28
  1. Sub SelectRepeat()
  2.     Dim i As Long, j As Long
  3.     Dim arr, arr1
  4.     arr = Range("a1:f" & Cells(Cells.Rows.Count, 6).End(xlUp).Row)
  5.     ReDim arr1(1 To UBound(arr), 1 To 3)
  6.     For i = 1 To UBound(arr)
  7.         For j = 1 To UBound(arr)

  8.             If arr(j, 3) - arr(i, 6) < 40 And arr(j, 1) = arr(i, 4) Then
  9.                
  10.                 arr1(j, 1) = arr(i, 4)
  11.                 arr1(j, 2) = arr(i, 5)
  12.                 arr1(j, 3) = arr(i, 6)
  13.             End If
  14.         Next
  15.     Next
  16.     Cells(1, "H").Resize(j - 1, 3) = arr1

  17. End Sub
复制代码

Help 2014-06-27.rar

14.63 KB, 下载次数: 9

Help 2014-06-27 2.rar

19.48 KB, 下载次数: 6

发表于 2014-6-28 20:30 | 显示全部楼层
=IFERROR(VLOOKUP(G3&H3,IF({1,0},D$1:D$23&E$1:E$23,F$1:F$23),2,),"")
回复

使用道具 举报

 楼主| 发表于 2014-6-28 20:37 | 显示全部楼层
本帖最后由 fan3031 于 2014-6-28 21:43 编辑
十五的月亮 发表于 2014-6-28 20:30
=IFERROR(VLOOKUP(G3&H3,IF({1,0},D$1:D$23&E$1:E$23,F$1:F$23),2,),"")

这个,不明白,更倾向于使用VBA,我可以修改一下。谢谢!
回复

使用道具 举报

发表于 2014-6-28 22:01 | 显示全部楼层
  1. Sub SelectRepeat()
  2.     Dim i As Long, j As Long
  3.     Dim arr, arr1
  4.     arr = Range("a1:f" & Cells(Cells.Rows.Count, 6).End(xlUp).Row)
  5.     ReDim arr1(1 To UBound(arr), 1 To 3)
  6.     For i = 1 To UBound(arr)
  7.         For j = 1 To UBound(arr)

  8.             If arr(j, 3) - arr(i, 6) < 40 And arr(j, 1) = arr(i, 4) Then
  9.                 k = k + 1
  10.                 arr1(k, 1) = arr(i, 4)
  11.                 arr1(k, 2) = arr(i, 5)
  12.                 arr1(k, 3) = arr(i, 6)
  13.             End If
  14.         Next
  15.     Next
  16.     Cells(1, "H").Resize(k, 3) = arr1

  17. End Sub
复制代码
是这个意思?
回复

使用道具 举报

 楼主| 发表于 2014-6-28 22:03 | 显示全部楼层
本帖最后由 fan3031 于 2014-6-28 22:08 编辑
十五的月亮 发表于 2014-6-28 22:01
是这个意思?

正在测试,先谢谢!

我需要找出来的数据与A列在等同的位置上,如上传文件一样。
如果是不同的sheet如何表示?
回复

使用道具 举报

 楼主| 发表于 2014-6-28 22:09 | 显示全部楼层
本帖最后由 fan3031 于 2014-6-28 22:16 编辑

能解释一下吗?
Sub SelectRepeat()
    Dim i As Long, j As Long
    Dim arr, arr1            这个变量么?
    arr = Range("a1:f" & Cells(Cells.Rows.Count, 6).End(xlUp).Row)  这个好复杂,是取有多少行吗?
    ReDim arr1(1 To UBound(arr), 1 To 3) 这个是数组吗?
    For i = 1 To UBound(arr)          这个更不知道了
        For j = 1 To UBound(arr)

            If arr(j, 3) - arr(i, 6) < 40 And arr(j, 1) = arr(i, 4) Then
                k = k + 1   k也没有定义呀?
                arr1(k, 1) = arr(i, 4) 这个似乎不是用对象什么操作?
                arr1(k, 2) = arr(i, 5)
                arr1(k, 3) = arr(i, 6)
            End If
        Next
    Next
    Cells(1, "H").Resize(k, 3) = arr1   这个也不知道
谢谢!!!
End Sub





回复

使用道具 举报

发表于 2014-6-28 22:28 | 显示全部楼层    本楼为最佳答案   
  1. Sub SelectRepeat()
  2.     Dim i As Long, j As Long
  3.     Dim arr, arr1
  4.     arr = Range("a1:f" & Cells(Cells.Rows.Count, 6).End(xlUp).Row)
  5.     ReDim arr1(1 To UBound(arr), 1 To 3)
  6.     For i = 1 To UBound(arr)
  7.         For j = 1 To UBound(arr)

  8.             If arr(j, 3) - arr(i, 6) < 40 And arr(j, 1) = arr(i, 4) Then
  9.                
  10.                 arr1(j, 1) = arr(i, 4)
  11.                 arr1(j, 2) = arr(i, 5)
  12.                 arr1(j, 3) = arr(i, 6)
  13.             End If
  14.         Next
  15.     Next
  16.     Cells(1, "H").Resize(j - 1, 3) = arr1

  17. End Sub
复制代码
回复

使用道具 举报

发表于 2014-6-28 22:29 | 显示全部楼层
用的数组,VBA我也不太会
回复

使用道具 举报

 楼主| 发表于 2014-6-28 22:35 | 显示全部楼层
十五的月亮 发表于 2014-6-28 22:29
用的数组,VBA我也不太会

这个可以了,如果在不同的sheet呢,还请完善一下!谢谢!
回复

使用道具 举报

发表于 2014-6-28 22:38 | 显示全部楼层
在不同的工作表里定义不同的数组,两个数组比较,读出的写在第三个数组
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 21:39 , Processed in 0.376947 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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