可以用一个简单的宏来解决这个问题。
按照如下方法新建一个宏:
菜单--工具--宏--宏,在出现的宏对话框上,宏名中输入test,点击创建,清空出现的模块1中的所有代码,把下面的代码拷贝到模块1代码窗口中
-------------------------代码分隔线,不要拷贝-----------
Sub test()
Dim i, j As Integer '定义循环变量
Dim iNum As Integer '统计数量
Dim bNeedCopy As Boolean
iNum = 0
For i = 1 To 8 '示例的数据是8行,具体可以根据实际需要进行修改,如数据有100行,就将8改成100
'默认A列中的文本在B列中
bNeedCopy = False
For j = 1 To 8 '同上面的i
'如果能找到,则不用复制到C列中
If Sheet1.Cells(i, 1) = Sheet1.Cells(j, 2) Then
bNeedCopy = True
End If
Next j
'找完B列后,发现没有和A列中相同的,则把A列中的文本复制到C列中
If bNeedCopy = False Then
iNum = iNum + 1
Sheet1.Cells(i, 3) = Sheet1.Cells(i, 1)
End If
Next i
MsgBox "共找到" & iNum & "个A列中有而B列中没有的数据!", vbInformation, "提示信息"
End Sub
-------------------------代码分隔线,不要拷贝-----------
按F5或者点菜单:运行--运行子过程/用户窗体来执行该宏,如果出现选择执行宏的对话框,则选择刚才输入的test,点击运行即可。程序会提示总共找到了多少个A列中有而B列中没有的数据,点击确定后,回到excel就能看到C列中会出现A中有B中没有的数据。
注意,由于宏安全性限制,如果下次打开的时候提示实宏被禁用,则按如下方法解决:
菜单--工具--宏--安全性,在出现的安全性对话框中选择低,确定就可以了,用完后记得再把安全性改回来。如果还有不明白的可以和我联系,呵呵!
试下这个公式:
C1=INDEX($A$1:$A$100,SMALL(IF(COUNTIF($B$1:$B$100,$A$1:$A$100)=0,ROW($A$1:$A$100)),ROW()))
D1=INDEX($B$1:$B$100,SMALL(IF(COUNTIF($A$1:$A$100,$B$1:$B$100)=0,ROW($B$1:$B$100)),ROW()))
输入完公式后同时按Ctrl、Shift、Enter三键完成输入
在C列中输入公式“=if(A1=B1,"","不同")”,再拖选单元格到需要的位置就行了。如果A列与B列不同,C列的单元格就会出现“不同”二字。
C1输入:
=IF(ISERROR(VLOOKUP(A1,B$1:B$8,1,FALSE)),"",VLOOKUP(A1,B$1:B$8,1,FALSE))
然后下拉(就是点住C1右下角的小黑点一直往下拉)
--------说明-----------
意思是:
如果没找到,写空格,
果能找到,列出同一行A列的数据。
主要是对Vlookup函数要熟悉
其实也可用Match函数等
A B 相同的数值出现次数
25 25 1
26 27 =COUNTIF($A$2:$A$9,$B3)
27 29 1
29 2A 1
2A 2C 1
2B 2D 1
2C 2E 0
2D 2F 0