求excel vba代码把A列筛选后B列可见单元格内容与sheet2内容重复的数量填入到C列

求excel vba代码把A列筛选后B列可见单元格内容与sheet2内容重复的数量填入到C列如图片说明,sheet1 A列是筛选状态,求vba代码把B列可见单元格数量与sheet2数量有一样的填入到对应C列单元格,因原数据有几十万行,这个操作使用非常频繁求用vba解决,谢谢

第1个回答  2018-02-25

不需要筛选,根据筛选条件,直接用VBA数组,获取到C列

追问

谢谢您的关注,想要sheet1筛选状态不要变,把Sheet2 A列和sheet1筛选后 B列可见单元格数量一样的填写在sheet1可见单元格对应的C列,谢谢

追答

D1就相当于筛选了,一个意思,是节省了操作步骤。。。

如非要筛选,就添加几句代码,自动获取筛选后,可见单元格的数据,交给变量,让数组识别运行。

你有几十万行数据,只有用VBA数组,最多几秒钟完成。

追问

原始数据有几十万行,筛选后的数据一般最多没超过一千行,可以把结果放在sheet1 C列吗,因为下一步需要把sheet1 C列对应起来数量的整行全部删除,谢谢!

追答

放在那里都可以

追问

可以把修改后的代码贴给我们吗,谢谢!

追答

你这个问题,说白了,就是根据筛选,将2个表,数量相同的行,批量删除

追问

代码只要写到把结果填在Sheet1 C列就好,删除这里还需要人工确认一些东西后再手动删除,谢谢!

您好,可以把您写好的代码贴给我看下吗,谢谢

追答

这个意思?

然后人工确认,删除相同的行?

追问

是的,可以不让筛选取消掉吗,因为数据太多反复操作频率也很高,筛选一次很卡,取消了筛选还要手工再多一次筛选,谢谢

追答

你最后还不是要取消,不取消,数组释放到本表,结果不对。
所以,我最先说,不需要筛选,一样可以达到这个效果,你非得要筛选这个操作。。。
用这个方式,你最后,筛选C列非空的数据,就删除数据相同的行了
真累。。。

追问

我也是自己写到这里不知道怎么解决了,所以求助的,谢谢您

追答

直接用vba完成

第2个回答  2018-02-25
感觉没有必要用VBA
直接用Vlookup函数就可以
C2中输入
=iferror(Vlookup(B2,Sheet2!A:A,1,),"")
往下填充即可追问

目前就是用的此方法,因数据几十万行,每行都套个公式Excel会很卡很卡,需要反复筛选一些不同数据进行匹配确认,所以希望用VBA会方便一些,谢谢!

本回答被网友采纳
第3个回答  2018-02-25

筛选后运行以下代码,能满足你的要求:

Sub 对比填数据()
Dim I&, Ar, Ra As Range, D As Object
Set D = CreateObject("scripting.dictionary")
Ar = Sheets("sheet2").UsedRange
For I = 2 To UBound(Ar)
   D(Ar(I, 1)) = ""
Next
For Each Ra In Sheets("Sheet1").UsedRange.Columns(2).SpecialCells(12)
   If D.exists(Ra.Value) Then Ra.Offset(, 1) = Ra
Next
End Sub

追问

太感谢了,正是我想要的结果,非常感谢

追答

不用谢,是因为你的截图很清楚表达了问题,截图中能看见行列标,否则我也没法写出代码

本回答被提问者采纳
相似回答