在excel中,用VBA实现两列数据的比较

如果我在A列中,输入的数据与B列中已有的数据有重复,那么A列中我输入的那个数据就变成红色,否则不变色,用VBA实现
qgrmdtj好象有些问题

实现代码如下:

1234567891011121314151617Sub abc() Dim D As Object, i As Integer, index As Integer Set D = CreateObject("scripting.dictionary") With Sheet1 For i = 1 To Range("b65536").End(xlUp).Row D(.Cells(i, 2).Value) = "" Next For i = 1 To Range("a65536").End(xlUp).Row If Not D.Exists(.Cells(i, 1).Value) Then index = index + 1 .Cells(index, 3) = .Cells(i, 1) End If Next End WithEnd Sub
用字典比较方便,省去重复的循环过程
如果数据量大,双层循环效率是很低的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-10-28
正面这段程序是反复测试过的,你粘贴到你的工作表的VBA中去就行了。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count = 1 Then
If Target.Column = 1 Then
If Application.WorksheetFunction.CountIf(Range("B:B"), Target) >= 1 Then
Target.Interior.ColorIndex = 3
Else
Target.Interior.ColorIndex = -4142
End If
End If
End If
End Sub
第2个回答  2008-10-28
用我这个试试

那就加一句

Private Sub Worksheet_Change(ByVal my As Range)
On Error Resume Next
With Application.WorksheetFunction
If my.Column = 1 Then
For Each rng In Range([a2], [a65536].End(xlUp))
If rng <> "" And .CountIf(Range([b2], [b65536].End(xlUp)), rng) > 0 Then
rng.Font.ColorIndex = 3
End If
Next
End If
End With
End Sub
------------------------------------------

那就加一句

Private Sub Worksheet_Change(ByVal my As Range)
On Error Resume Next
With Application.WorksheetFunction
If my.Column = 1 Then
For Each rng In Range([a2], [a65536].End(xlUp))
If rng <> "" And .CountIf(Range([b2], [b65536].End(xlUp)), rng) > 0 Then
rng.Font.ColorIndex = 3
Else
rng.Font.ColorIndex = 1
End If
Next
End If
End With
End Sub本回答被提问者采纳
第3个回答  2008-10-28
Private Sub Worksheet_Change(ByVal Target As Range)
Target.Font.ColorIndex = 0
Dim i As Integer
If Target.Column = 1 Then
For i = 1 To Range("b65536").End(xlUp).Row
If Target = Cells(i, 2) Then
Target.Font.ColorIndex = 3
Exit Sub
End If
Next
End If
End Sub
第4个回答  2008-10-28
Private Sub Worksheet_Change(ByVal Target As Range)
Target.Font.ColorIndex = 0
If Target.Column = 1 And Target = Target.Offset(0, 1) Then
Target.Font.ColorIndex = 3
End If
End Sub

在excel中,用VBA实现两列数据的比较
实现代码如下:1234567891011121314151617Sub abc() Dim D As Object, i As Integer, index As Integer Set D = CreateObject("scripting.dictionary") With Sheet1 For i = 1 To Range("b65536").End(xlUp).Row D(.Cells(i, 2).Value) = "" Next For i = 1 To R...

VBA 在EXCEL中能不能 对两列名称进行对比 筛选 并将不同项列出来
可以,我介绍个笨方法,用IF 函数,先读第一列第一个数据为A1,然后读第二列数据,每个都同A1比较,相同的忽略,不同的将数值付给一个变量;然后再读第二个数据A2,重复读第二列数据,进行比较---直至两列数据全部结束,这里面用到IF..THEN..ELSE..ENDIF ,FOR...NEXT语句 ...

excel两列数据比较
给你个VBA解决方法。按住ALT,依次按F11,I,M 粘贴下面的代码后按F5运行(或在excel界面按ALT+F8执行该宏)Sub 对对碰()On Error Resume Next Dim x As Integer For r = 1 To [A65536].End(xlUp).Row x = Application.WorksheetFunction.Match(Cells(r, 1), Columns(2), 0)If x <> 0 ...

求助VBA实现2列数据比较
VBA做个嵌套循环的问题。不过我看你用的是ACTIVE控件的按钮。代码需要写在对应的控件中,当然也可以在模块中写宏,然后在控件中写句调用代码。思路可以告诉你,但是不会免费给你写具体代码的。毕竟要消耗精力和时间的,还要测试。如需要写可以私信另议。思路如下,先循环要核对的区域,嵌套循环要被核对的...

使用excel vba自动对比两列时间数字
相信使用条件格式,是最简单的。选定数列1,再依次选择菜单 格式 条件格式 弹出条件格式对话框 第一个下拉框选 公式,后面框中输入 =COUNTIF($B$2:$B$15,"=" & $A2)=0 格式再选择下自己喜欢的 下面图是个简单例子

Excel 2列对比
在第一列数据中设置条件格式,并使用公式确定设置规则,输入=COUNTIF(B:B,A1)=0,格式选择填充色,确定,即可实现A列有而B列没有的数据以填充色显示的效果。详见附图:

Excel VBA比较两列对应单元格字符是否相同?
For i = 起始行 To EndRow If Not Cells(i, 对比列).Value = Cells(i, 插入列).Value Then Cells(i, 插入列).Insert Shift:=xlDown End If Next i End Function 说明:定义一个自定义函数:对比插入(对比列,插入列,起始行)(这里定义的是三个可选函数,即不填写为默认值)调用函数与单元...

用VBA检查EXCEL中两列数据的重复数据
这个用2嵌套的循环来实现比对就可以了,A列第一个数据和B列第一个数据比对,如果不重复就转到B列第二个,如果重复了就转到A列第二个,依次比对。大概十几句代码吧,添加一个按钮: (假定数据从第二行开始)Private Sub CommandButton1_Click()ROW_A = 2: ROW_B = 2 ENDROW_B = [A65536].End(...

excel用VBA实现两列数据比较是否相等
sub test()‘假设e列和f列比较,结果写入g列,对应的列号为5、6、7 ‘开始行号=2 hh=2 do while cells(hh,5)<>""IF CELLS(HH,5)=CELLS(HH,6) THEN CELLS(HH,7)="正确"else CELLS(HH,7)="错误"endif HH=HH+1 LOOP end sub ...

Excel表中通过VBa对比数据的语句?
有可能是表格中纯数字项保存成了字符型。比如某一列在全部中是文本型保存的,在税票列是数字型的,那么,这个虽然一样,但是不能匹配。把你能确定都是数字的那一列强制*1,比如这样 If Sheets("全部").Cells(i, 8) *1= Sheets("税票").Cells(j, 8) *1Then 就不会有遗漏了。Sub 数据对...

相似回答