随着手机里面功能越来越丰富,让我们使用起来越来越方便了,给我们的生活带来了极大的便利。怎样使用VBA代码查询两列数据差异?
工具/原料
手机
方法/步骤
1、首先在开发工具中打开VBA编辑器
2、在单元格区域当中输入一些内容作为例子
3、在VBA编辑器中插入模块
4、在模块当中输入如下代码,然后运行SubCheckTwoClnData()Dim咯悝滩镞dAsObjectDimiAsLong,n1AsLong,荏鱿胫协n2AsLong,n3AsLong,mAsLongDimstrTempAsStringDimarr1AsVariant,arr2AsVariant,brrAsVariant,krAsVariantDimrng1AsRange,rng2AsRange,rngAsRangeSetd=CreateObject("scripting.dictionary")OnErrorResumeNextSetrng1=Application.InputBox("请选择需要核对差异的第一列数据",Type:=8)'用户选取第一列数据Ifrng1.Columns.Count>1ThenMsgBox"请选择单列数据。":ExitSubIfrng1.Rows.Count=1ThenMsgBox"不能选择单个单元格。":ExitSubSetrng1=Intersect(rng1.Parent.UsedRange,rng1)'防止用户选取整列造成运算量虚大效率低下IfNotrng1IsNothingThenarr1=rng1.Value'将第一列数据装入arr1Setrng2=Application.InputBox("请选择需要核对差异的第二列数据",Type:=8)'用户选取第二列数据Ifrng2.Columns.Count>1ThenMsgBox"请选择单列数据。":ExitSubIfrng2.Rows.Count=1ThenMsgBox"不能选择单个单元格。":ExitSubSetrng2=Intersect(rng2.Parent.UsedRange,rng2)IfNotrng2IsNothingThenarr2=rng2.ValueFori=2ToUBound(arr1)'扣除标题行IfLen(arr1(i,1))Thend("'"&arr1(i,1))="不存在"'将数据统一强制转换为字符串格式'数据装入字典,先统一设置item为不存在EndIfNextIfUBound(arr1)>UBound(arr2)Then'计算两列最大行数m=UBound(arr1)Elsem=UBound(arr2)EndIfReDimbrr(0Tom,1To3)'结果数组'第一列放AB均存在的数据'第二列放A有B没有的数据'第三列放B有A没有的数据Fori=2ToUBound(arr2)IfLen(arr2(i,1))ThenstrTemp="'"&arr2(i,1)Ifd.exists(strTemp)Then'如果A有B也有n1=n1+1brr(n1,1)=strTempd(strTemp)="存在"'将AB均有的数据item修改为存在Else'如果B有A没有n3=n3+1brr(n3,3)=strTempEndIfEndIfNextkr=d.keysFori=0ToUBound(kr)Ifd(kr(i))="不存在"Then'如果A有B没有n2=n2+1brr(n2,2)=kr(i)EndIfNextErr.ClearSetrng=Application.InputBox("请选择放置查询结果的单元格,例如C1",Type:=8)rng.Parent.Selectrng.SelectIfErr.Number=0Thenbrr(0,1)="两列均存在的数据有"&n1&"条"brr(0,2)="A有B没有的数据有"&n2&"条"brr(0,3)="B有A没有的数据有"&n3&"条"Withrng(1).Resize(UBound(brr)+1,3).ClearContents'打扫房间.NumberFormatLocal="@"'设置文本格式,防止文本数值变形.Value=brrEndWithMsgBox"核对完成。"&vbLf&brr(0,1)&vbLf&brr(0,2)&vbLf&brr(0,3)EndIfSetd=NothingSetrng=NothingSetrng1=NothingSetrng2=NothingErasearr1:Erasearr2:ErasebrrEndSub
5、代码使用了字典对象,首先将第一列的数据装入字典,并将item统一设置为“粲茸锿枋不存在”,然后判断第二列的数据是否在字典中存在,如果台仵瑕噤存在,则将条目对应的item修改为“存在”,最后遍历字典,查询item仍然为“不存在”的数据