Excel精英培训网

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

[已解决]高手给看一看 宏有什么错误呀!

[复制链接]
发表于 2011-8-18 22:19 | 显示全部楼层 |阅读模式
高手看一看.rar (127.33 KB, 下载次数: 8)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-8-18 22:28 | 显示全部楼层
回复

使用道具 举报

发表于 2011-8-18 22:28 | 显示全部楼层
A列B列放好数据就可以运行了啊。。。
回复

使用道具 举报

发表于 2011-8-18 22:29 | 显示全部楼层
out.jpg 我运行好的结果:
回复

使用道具 举报

 楼主| 发表于 2011-8-18 22:31 | 显示全部楼层
我在A B列放置数据了,运行结果也显示这样的结果
回复

使用道具 举报

 楼主| 发表于 2011-8-18 22:38 | 显示全部楼层
回复 放浪形骸 的帖子

高级筛选(1).rar (140.29 KB, 下载次数: 2)
回复

使用道具 举报

发表于 2011-8-18 22:38 | 显示全部楼层
代码没有错误
当第二行没有数据时
brr为没数据
所以会出现错误、
当第二行没有数据时不为空时
运行正常
回复

使用道具 举报

发表于 2011-8-18 22:42 | 显示全部楼层
哦,我刚才看错了。
应该是这样的:
  1. Sub 高级筛选1()
  2.     With Sheets("Sheet1")
  3.         Dim arr, n As Double, dic As New Dictionary, brr()
  4.         n = .Range("a65536").End(xlUp).Row
  5.         arr = .Range("a1:b" & n)
  6.         For i = 1 To UBound(arr)
  7.             If dic.Exists(arr(i, 2)) Then
  8.                 m = m + 1
  9.                 ReDim Preserve brr(1 To 2, 1 To m)
  10.                 brr(1, m) = arr(i, 1): brr(2, m) = arr(i, 2)
  11.             Else
  12.                 dic(arr(i, 2)) = arr(i, 1)
  13.             End If
  14.         Next
  15.         .Range("e:f").ClearContents
  16.         .Range("e1:f1") = Array("姓名", "身份证号")
  17.         .Range("e2").Resize(m, 2) = Application.Transpose(brr) 'E、F列放身份证号有重复的
  18.         .Range("c:d").ClearContents
  19.         .Range("c1").Resize(dic.Count) = Application.Transpose(dic.Items) 'C列、D列放不重复值
  20.         .Range("d1").Resize(dic.Count) = Application.Transpose(dic.Keys)
  21.     End With
  22. End Sub
复制代码
把中间的循环判断中的if成立时的
  1. brr(1, m) = dic(arr(i, 2))
复制代码
改成
  1. brr(1, m) = arr(i, 1)
复制代码
因为这时候brr里需要存储的是同样的身份证号对应的不同的名字
回复

使用道具 举报

 楼主| 发表于 2011-8-18 22:42 | 显示全部楼层
本帖最后由 dong66094799 于 2011-8-18 22:44 编辑

我想做到 A B列有数据时筛选,并在E F列显示出所有A B列重复数据而不是只显示一个重复数据
例如AB列 张三 37010119740416001X 张三 37010119740416001X 二条数据重复,这个宏在EF列只能显示一条重复 我想显示所有重复数据 能做到吗? 请高手指教!谢谢
回复

使用道具 举报

 楼主| 发表于 2011-8-18 22:50 | 显示全部楼层
Sub 高级筛选1()

    With Sheets("Sheet1")

        Dim arr, n As Double, dic As New Dictionary, brr()

        n = .Range("a65536").End(xlUp).Row

        arr = .Range("a1:b" & n)

        For i = 1 To UBound(arr)

            If dic.Exists(arr(i, 2)) Then

                m = m + 1

                ReDim Preserve brr(1 To 2, 1 To m)

                brr(1, m) = arr(i, 1): brr(2, m) = arr(i, 2)

            Else

                dic(arr(i, 2)) = arr(i, 1)

            End If

        Next

        .Range("e:f").ClearContents

        .Range("e1:f1") = Array("姓名", "身份证号")

        .Range("e2").Resize(m, 2) = Application.Transpose(brr) 'E、F列放身份证号有重复的

        .Range("c:d").ClearContents

        .Range("c1").Resize(dic.Count) = Application.Transpose(dic.Items) 'C列、D列放不重复值

        .Range("d1").Resize(dic.Count) = Application.Transpose(dic.Keys)

    End With

End Sub

我代码复制宏内了 还不好使呀?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 13:02 , Processed in 0.290908 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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