如何将excel中两列数据进行比对,并将结果返回到不同的列

比如说我现在A列中有3000个数字,B列中有2000个数字,我如何让它们进行比对并且将这两列中相同的数字填到C列,不同的数字填到D列??

就是如何求交集和差集的问题
如不用VBA,简单使用公式如下:先假设A列最后一行是第a行,B列最后一行是第b行。
单元格C1: 输入公式 =IF(COUNTIF(B:B,A1)>0,A1,"")
然后将C1的公式一直往下拖,拖到第x行(x=a、b两者最小值)
【C列中的非空单元格,就是A列和B列的相同值】
单元格D1: 输入公式 =IF(COUNTIF(B:B,A1)=0,TRIM(A1),"")
然后将D1的公式一直往下拖,拖到第a行

单元格E1: 输入公式 =IF(COUNTIF(A:A,B1)=0,TRIM(B1),"")
然后将E1的公式一直往下拖,拖到第b行

最后将D列和E列数据集中起来(比如,将E列数据,选择性粘贴到D列第a+1行),
【非空单元格就是,A列和B列的不同值】。

参考资料:小乐笑了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-16
假如你要比较A列与B列数据是否重复,应该有三种结果(即AB皆有,A有B无,B有A无),可在C列存放A有B无的数据,在D列存放B有A无的数据,然后再将两列数据合并即可,方法如下:
1、在C1单元格输入公式:
=IF(COUNTIF($B:$B,A1)=0,A1,"")
在D1单元格输入公式:
=IF(COUNTIF($A:$A,B1)=0,B1,"")
将两个公式用填充柄向下复制到相应的行。
2、按C列排序,将C列数据集中在一起,将其复制到另一工作表的A列;再按D列排序,将D列数据集中在一起,并将其复制到另一工作表的A列的尾部。(注意:这两个操作要用“选择性粘贴/数值”进行粘贴)
3、删除原表的CD两列,将另一工作表中A列的数据复制回原表的C列。本回答被提问者采纳
第2个回答  2011-03-16
用VBA可解决。ALT+F11打开VBA窗口,双击左边的SHEET1,在右边粘贴下面代码,按f5运行。
默认为A1-A20,B1-B22的单元格范围,A20可改为A3000,B22可改为B2000。数据填充要C、D列。
Sub sample()
Dim mycell As Range
m = 1
n = 1
For Each mycell In Range("A1:A20", "B1:B22")
If Application.WorksheetFunction.CountIf(Range("A1:A20", "B1:B22"), mycell) > 1 Then
Cells(m, 3) = mycell
m = m + 1
End If
If Application.WorksheetFunction.CountIf(Range("A1:A20", "B1:B22"), mycell) = 1 Then
Cells(n, 4) = mycell
n = n + 1
End If
Next
End Sub
第3个回答  2011-03-16
先来一个,相同的意思是不是将B列与A列中有相同数据的数据返回,如果是假设数据在A1:A3000,B1:B2000中,C1中输入
=INDEX(B:B,SMALL(IF(COUNTIF(A$1:A$3000,B$1:B$2000),ROW(B$1:B$2000),4^8),ROW(A1)))&""
同时按下CTRL+SHIFT+ENTER输入数组公式,用自动填充柄下拉。
第二个问题,是返回两列不同的所有数据,还是返回A列中与B列中不同的A列所在数据,还是返回A列和B列不同数据的B列数据,如果返回两列不同的所有数据,公式应有难度,返回一列中的不同数据,公式比较容易。
第二公式,D1
=INDEX(B:B,SMALL(IF(COUNTIF(A$1:A$30,B$1:B$20)=0,ROW(B$1:B$20),4^8),ROW(A1)))&""
同时按下CTRL+SHIFT+ENTER输入数组公式,下拉,返回B列与A列不相同数据的数据。
第4个回答  2011-03-16
经测试,1楼的不能完成楼主的提问.主要的问题是输出到C列的数据照样重复了.
我改编了一下,
Sub sample()
Dim mycell As Range
m = 1
n = 1
a = "A1:A3000" '楼主如果要改A列的数据数量,改这里就行,你要是4000行,改成A1:A4000即可
b = "B1:B2000" '楼主如果要改B列的数据数量,改这里就行,你要是1000行,改成B1:B1000即可
For Each mycell In Range(a, b) '循环A1:A3000,B1:B3000里的每一个数据
If Application.WorksheetFunction.CountIf(Range(a, b), mycell.Value) > 1 And Application.WorksheetFunction.CountIf(Range("C1:C" & m), mycell.Value) < 1 Then
'如果这个区域里的数据数量大于1,即表示数据重复了,后面的条件是如果C列的数据数量小于1即表示未写入,然后将数据输出到C列
Cells(m, 3) = mycell.Value
m = m + 1
ElseIf Application.WorksheetFunction.CountIf(Range(a, b), mycell.Value) = 1 Then
'这里表示只有一个数据就输出到D列.
Cells(n, 4) = mycell.Value
n = n + 1
End If
Next
End Sub

经测试,圆满完成楼主的要求.
若楼主不懂VBA的话,我可以给楼主发文件,Hi我即可
相似回答