Excel精英培训网

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

[已解决]提取相同数据与删除相同数据

[复制链接]
发表于 2013-10-14 23:26 | 显示全部楼层 |阅读模式
提取相同数据与删除相同数据,详见附件,求二段VBA,谢谢。
提取与删除.rar (2.63 KB, 下载次数: 18)
发表于 2013-10-15 09:31 | 显示全部楼层    本楼为最佳答案   
提取与删除.rar (10.77 KB, 下载次数: 48)
回复

使用道具 举报

发表于 2013-10-15 11:17 | 显示全部楼层
写了一个:
Sub test1()
    Dim arr(), brr()
    i% = Sheets("表一").Range("A65536").End(3).Row
    arr = Sheets("表一").Range("A3").Resize(i - 2, 2).Value
    ReDim Preserve arr(1 To i - 2, 1 To i)
    i% = Sheets("表二").Range("A65536").End(3).Row
    brr = Sheets("表二").Range("A2").Resize(i - 1, 1).Value
    Set d = CreateObject("scripting.dictionary")
    For i = 1 To UBound(brr)
        d(brr(i, 1)) = 0
        brr(i, 1) = 1
    Next
    For i = 1 To UBound(arr)
        If d.exists(arr(i, 1)) Then
           If d(arr(i, 1)) < 1 Then
              j = j% + 1
              d(arr(i, 1)) = j
              arr(d(arr(i, 1)), 1) = arr(i, 1)
            End If
            brr(d(arr(i, 1)), 1) = brr(d(arr(i, 1)), 1) + 1
            arr(d(arr(i, 1)), brr(d(arr(i, 1)), 1)) = arr(i, 2)
            If maxa < brr(d(arr(i, 1)), 1) Then maxa = brr(d(arr(i, 1)), 1)
         End If
    Next
    Sheets("表三").Range("A2:Z65536").ClearContents
    Sheets("表三").Range("A2").Resize(j, maxa) = arr
End Sub
回复

使用道具 举报

 楼主| 发表于 2013-10-15 21:28 | 显示全部楼层
很好用,谢谢,但测试了一下,有一点有问题,就是如果无相同的数据,就会出错,请修改一下。谢谢 。
回复

使用道具 举报

发表于 2013-10-16 15:33 | 显示全部楼层
wuliao_tao 发表于 2013-10-15 21:28
很好用,谢谢,但测试了一下,有一点有问题,就是如果无相同的数据,就会出错,请修改一下。谢谢 。

加一句判断
Sub TQ()
    ARR = Sheets("表一").Range("A3:B" & Sheets("表一").Range("A65536").End(3).Row)
    BRR = Sheets("表二").Range("A2:A" & Sheets("表二").Range("A65536").End(3).Row)
    Set d = CreateObject("scripting.dictionary")
    For I = 1 To UBound(BRR)
        For J = 1 To UBound(ARR)
            If BRR(I, 1) = ARR(J, 1) Then
                If Not d.exists(BRR(I, 1)) Then
                    d(BRR(I, 1)) = ARR(J, 2)
                Else
                    d(BRR(I, 1)) = d(BRR(I, 1)) & "|" & ARR(J, 2)
                End If
            End If
        Next
    Next
    K = d.KEYS
    If d.Count = 0 Then MsgBox "没有相同姓名!": Exit Sub
    ReDim ZH(1 To d.Count, 1 To 26)
    With Sheets("表三")
        .Range("A2:Z65536").ClearContents
        For I = 0 To UBound(K)
            Z = Split(d(K(I)), "|")
            ZH(I + 1, 1) = K(I)
            For J = 0 To UBound(Z)
                ZH(I + 1, J + 2) = Z(J)
            Next
        Next
        .Range("A2").Resize(UBound(ZH), 26) = ZH
    End With
End Sub
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 21:09 , Processed in 0.285146 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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