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

2024-11-08 15:55:43
推荐回答(5个)
回答(1):

用函数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

运行该宏后,结果如图:

回答(2):

亲,如果数据几万行,就不太适合用公式了,以下是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

 

回答(3):

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

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

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

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

回答(4):

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

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

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

回答(5):

在C1写入公式:=IF(COUNTIF(A:A,B1)=0,A1,""),选C1下拉。