EXCEL求A列排除B列,结果显示在C列中怎么做?

如图,我想求A列中与B列不重复的内容,显示在C列中,请问应该怎么做?
如果列数庞大,比如A列和B列都有几万项,应该怎么做呢?

用函数VLOOKUP+筛选可以解决。也可以用万能的vba来实现。

现举例用vba解决。

基本思路:创建字典B,将B列数据存放到字典B中.遍历数据A列,如果字典B中不存在就追加到C列中。遍历结束,则C列数据即为A-B的结果。

表格初始数据如图:

第一步:创建宏,并编制代码如下:

Sub 数据排除()

Dim mys As String

Dim I, J As Integer

Dim b As Object

mys = "数据排除"

Set b = CreateObject("Scripting.Dictionary")

Sheets(mys).Select

I = 2

Do While Cells(I, 2) <> "" '将名单放入字典

m_key = Cells(I, 2)

M_ITEM = I - 1

If Not b.Exists(m_key) Then

   b.Add m_key, M_ITEM

End If

I = I + 1

Loop

J = 2 '记录C列写入数据的最新行号

I = 2

Do While Cells(I, 1) <> "" '将A列数据排除B列后存入C列

m_key = Cells(I, 1)

If Not b.Exists(m_key) Then

   Cells(J, 3) = m_key

   J = J + 1

End If

I = I + 1

Loop

End Sub

运行该宏后,结果如图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-02

亲,如果数据几万行,就不太适合用公式了,以下是VBA代码。附件已上传。

 

Sub bcf()
Dim d, Aarr, Barr, Carr
Dim i, n As Long
Set d = CreateObject("Scripting.Dictionary")
Aarr = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
Barr = Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row)
Carr = Range("C1:C" & Range("A" & Rows.Count).End(xlUp).Row)
For i = 1 To UBound(Aarr)
    d(Aarr(i, 1)) = 1
Next
For i = 1 To UBound(Barr)
    If d.exists(Barr(i, 1)) Then d(Barr(i, 1)) = 0
Next
For i = 1 To UBound(Aarr)
    If d(Aarr(i, 1)) = 1 Then n = n + 1: Carr(n, 1) = Aarr(i, 1)
Next
Range("C:C").ClearContents
Range("C1:C" & UBound(Carr)) = Carr
End Sub

 

追问

实在谢谢你,不过没看到你的回答,不然分就给你了,对不住啊!再次感谢!

追答

没关系,如果公式太慢就试试这个

第2个回答  2014-09-02

假设B列数据有10000行,那么C1输入公式

=IF(COUNTIF($B$1:$B$10000,A1),"",A1)

然后向下填充,所有B没有A有的都显示出来了。

然后复制C列,原地选择性粘贴为“数值”.

第3个回答  2014-09-02

C1=INDEX(A:A,SMALL(IF(ISERROR(MATCH(A:A,B:B,)),ROW(A:A),2^17),ROW()))&""

数组公式,输完按Ctrl+Shift+Enter结束

如果数据太多,用VBA吧。把数据给我

本回答被提问者采纳
第4个回答  2014-09-02
在C1写入公式:=IF(COUNTIF(A:A,B1)=0,A1,""),选C1下拉。
相似回答