Excel精英培训网

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

[已解决]两列数据求 差别 在哪里

[复制链接]
发表于 2014-5-20 09:38 | 显示全部楼层 |阅读模式
本帖最后由 billyzhang0609 于 2014-5-20 11:43 编辑

各位师兄

       已知A列数据  和  C列数据
       求两列的差别(C比A列多哪些单元格,少哪些单元格)后,筛选出来。

最佳答案
2014-5-20 10:56
本帖最后由 云影 于 2014-5-20 10:59 编辑


Sub test()
    Dim arr, ar1, er(), d As Object, x&, i&, k%, n%
    Set da = CreateObject("scripting.dictionary")
    Set dc = CreateObject("scripting.dictionary")
    Range("e:f").ClearContents
    i = Cells.Find("*", , , , , xlPrevious).Row
    arr = Range("a2:c" & i + 1).Value
    ReDim er(1 To i + 1, 1 To 2)
    For x = 1 To i
        da(arr(x, 1)) = ""
        dc(arr(x, 3)) = ""
    Next
    For x = 1 To i
        If Not da.exists(arr(x, 3)) Then
            k = k + 1
            er(k + 1, 1) = arr(x, 3)  '多的
        End If
        If Not dc.exists(arr(x, 1)) Then
            n = n + 1
            er(n + 1, 2) = arr(x, 1)  '少的
        End If
    Next
    er(1, 1) = "C比A列多": er(1, 2) = "C比A列少"
    Range("E2").Resize(x, 2) = er
End Sub

对比两列差异.zip

14.92 KB, 下载次数: 10

发表于 2014-5-20 10:00 | 显示全部楼层
回复

使用道具 举报

发表于 2014-5-20 10:02 | 显示全部楼层
A列多
=INDEX(A$1:A$600,SMALL(IF(COUNTIF(C$2:C$600,A$2:A$600)=0,ROW(A$2:A$600)),ROW(A1)))
A列少
=INDEX(C$1:C$600,SMALL(IF(COUNTIF(A$2:A$600,C$2:C$600)=0,ROW(C$2:C$600)),ROW(A1)))
回复

使用道具 举报

发表于 2014-5-20 10:03 | 显示全部楼层
本帖最后由 zjdh 于 2014-5-20 10:11 编辑

Sub TEST()
    Cells.Interior.ColorIndex = 0
    For I = 2 To Range("C65536").End(3).Row
        Set W = Range("A:A").Find(Cells(I, 3), , LookIn:=xlValues, lookAT:=xlWhole)
        If W Is Nothing Then Cells(I, 3).Interior.ColorIndex = 6
    Next
    For I = 2 To Range("A65536").End(3).Row
        Set W = Range("C:C").Find(Cells(I, 1), , LookIn:=xlValues, lookAT:=xlWhole)
        If W Is Nothing Then Cells(I, 1).Interior.ColorIndex = 4
    Next
End Sub
回复

使用道具 举报

发表于 2014-5-20 10:05 | 显示全部楼层
本帖最后由 zjdh 于 2014-5-20 10:11 编辑

对比两列差异.rar (14.77 KB, 下载次数: 4)
回复

使用道具 举报

发表于 2014-5-20 10:10 | 显示全部楼层
{:02:}  做了个最简单的    A列的数在C列都有   C列的一部分在A列没有

325313-对比两列差异.rar

23.67 KB, 下载次数: 3

回复

使用道具 举报

发表于 2014-5-20 10:13 | 显示全部楼层
4楼5楼已修改
回复

使用道具 举报

发表于 2014-5-20 10:19 | 显示全部楼层
刚学数组,写个玩玩
Sub test()
Dim arr, brr, crr(1 To 10000), i%, k
arr = Range("A2").CurrentRegion
brr = Range("C2").CurrentRegion
For i = 1 To UBound(brr)
If VBA.IsError(Application.Match(brr(i, 1), arr, 0)) Then
k = k + 1
crr(k) = brr(i, 1)
End If
Next
Range("E2").Resize(UBound(crr), 1) = Application.Transpose(crr)
End Sub
回复

使用道具 举报

 楼主| 发表于 2014-5-20 10:49 | 显示全部楼层
as0810114 发表于 2014-5-20 10:00
要单元格地址还是内容?

是内容,不过楼下 解答颇多,容我细细看来。
回复

使用道具 举报

发表于 2014-5-20 10:56 | 显示全部楼层    本楼为最佳答案   
本帖最后由 云影 于 2014-5-20 10:59 编辑


Sub test()
    Dim arr, ar1, er(), d As Object, x&, i&, k%, n%
    Set da = CreateObject("scripting.dictionary")
    Set dc = CreateObject("scripting.dictionary")
    Range("e:f").ClearContents
    i = Cells.Find("*", , , , , xlPrevious).Row
    arr = Range("a2:c" & i + 1).Value
    ReDim er(1 To i + 1, 1 To 2)
    For x = 1 To i
        da(arr(x, 1)) = ""
        dc(arr(x, 3)) = ""
    Next
    For x = 1 To i
        If Not da.exists(arr(x, 3)) Then
            k = k + 1
            er(k + 1, 1) = arr(x, 3)  '多的
        End If
        If Not dc.exists(arr(x, 1)) Then
            n = n + 1
            er(n + 1, 2) = arr(x, 1)  '少的
        End If
    Next
    er(1, 1) = "C比A列多": er(1, 2) = "C比A列少"
    Range("E2").Resize(x, 2) = er
End Sub

对比两列差异.rar

27.03 KB, 下载次数: 4

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 12:23 , Processed in 0.292681 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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