Excel精英培训网

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

[已解决]请高手帮忙!

[复制链接]
发表于 2013-10-23 02:45 | 显示全部楼层 |阅读模式
本帖最后由 wszbd 于 2013-10-23 12:01 编辑

新建 Microsoft Excel 工作表.rar (2.48 KB, 下载次数: 10)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-10-23 08:28 | 显示全部楼层

  1. Public Sub tt()
  2.     Dim e_arr()
  3.     arr_1 = Range("V1").CurrentRegion
  4.     arr_2 = Range("y2:y6")
  5.     For Each a In arr_1
  6.         For Each b In arr_2
  7.             If InStr(a, Left(b, 1)) > 0 And InStr(a, Right(b, 1)) > 0 Then
  8.                 k = k + 1
  9.                 ReDim Preserve e_arr(1 To k)
  10.                 e_arr(k) = a
  11.                 Exit For
  12.             End If
  13.         Next
  14.     Next
  15. End Sub
复制代码
相同的号码 出错 例如 77
回复

使用道具 举报

发表于 2013-10-23 08:29 | 显示全部楼层    本楼为最佳答案   
筛选.rar (7.88 KB, 下载次数: 15)
回复

使用道具 举报

发表于 2013-10-23 08:46 | 显示全部楼层
本帖最后由 jio1ye 于 2013-10-23 10:34 编辑
  1. Sub shachu()

  2. Dim arr1(), arr2, arr3(), n

  3. arr1 = Range("V1:V" & Range("V65535").End(xlUp).Row)
  4. arr2 = Range("Y2:Y" & Range("Y65535").End(xlUp).Row)

  5. For i = 1 To UBound(arr2)
  6.     n = 0
  7.     For j = 1 To UBound(arr1)
  8.         If IsError(Application.Find(VBA.Left(arr2(i, 1), 1), arr1(j, 1))) Or IsError(Application.Find(VBA.Right(arr2(i, 1), 1), arr1(j, 1))) Then
  9.             If VBA.Left(arr2(i, 1), 1) = VBA.Right(arr2(i, 1), 1) And Application.Count(arr1(j, 1), VBA.Right(arr2(i, 1), 1)) = 2 Then
  10.             Else
  11.             n = n + 1
  12.             ReDim Preserve arr3(1 To n)
  13.             arr3(n) = arr1(j, 1)
  14.             End If
  15.         Else
  16.         End If
  17.     Next j
  18. arr1 = Application.Transpose(arr3)
  19. Next i
  20. range("Z:Z")=""
  21. Range("z1").Resize(UBound(arr1), 1) = arr1
  22. End Sub
复制代码
新建 Microsoft Excel 工作表.rar (192.98 KB, 下载次数: 14)
回复

使用道具 举报

 楼主| 发表于 2013-10-23 11:39 | 显示全部楼层
zjdh 发表于 2013-10-23 08:29

老师真厉害,程序不仅可以过滤二码,还可以过滤单码。

就是有一点Z列是从Z2开始的,能否让其从Z1开始,好复制。
回复

使用道具 举报

 楼主| 发表于 2013-10-23 11:39 | 显示全部楼层
jio1ye 发表于 2013-10-23 08:46

相同的号码 出错 例如 77

谢谢!
回复

使用道具 举报

 楼主| 发表于 2013-10-23 11:42 | 显示全部楼层
qcw811206 发表于 2013-10-23 08:28
相同的号码 出错 例如 77

程序怎么不工作


谢谢!
回复

使用道具 举报

发表于 2013-10-23 13:03 | 显示全部楼层
wszbd 发表于 2013-10-23 11:39
老师真厉害,程序不仅可以过滤二码,还可以过滤单码。

就是有一点Z列是从Z2开始的,能否让其从Z1开始, ...

删掉Z1空单元
Sub TEST()
    ARR = Range("V1:V" & Range("V65536").End(3).Row)
    BRR = Range("Y2:Y" & Range("Y65536").End(3).Row)
    For I = 1 To UBound(ARR)
        For J = 1 To UBound(BRR)
            S = 0
            W = ARR(I, 1)
            For T = 1 To Len(BRR(J, 1))
                Q = InStr(W, Mid(BRR(J, 1), T, 1))
                If Q Then
                    S = S + 1
                    W = Left(W, Q - 1) & Right(W, Len(W) - Q)
                End If
            Next
            If S = Len(BRR(J, 1)) Then ARR(I, 1) = "": Exit For
        Next
    Next
    Range("Z:Z").ClearContents
    For I = 1 To UBound(ARR)
        If ARR(I, 1) <> "" Then Range("Z65536").End(3)(2) = ARR(I, 1)
    Next
    Range("Z1").Delete
End Sub
回复

使用道具 举报

 楼主| 发表于 2013-10-23 13:50 | 显示全部楼层
zjdh 发表于 2013-10-23 13:03
删掉Z1空单元
Sub TEST()
    ARR = Range("V1:V" & Range("V65536").End(3).Row)

{:011:}
谢谢!!!
回复

使用道具 举报

 楼主| 发表于 2013-10-23 23:13 | 显示全部楼层
zjdh 发表于 2013-10-23 13:03
删掉Z1空单元
Sub TEST()
    ARR = Range("V1:V" & Range("V65536").End(3).Row)

老师你好:
   如果做相反的操作,就是把同时含有Y列两个号码的V列号码留下来,过滤后输入到Z列,那么代码该如何修改,请老师赐教?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 17:01 , Processed in 0.450234 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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