数值与字典解决方案第二十六讲:FILTER函数在去除数据的方法
《VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。
这套字典教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:数值与字典解决方案第二十六讲:FILTER函数在某个数据列中去除数据的方法
【分享成果,随喜正能量】131 真正的修佛之人。首先,得明白自己的来处和归宿,懂得敬畏自己的生命和他人的生命,尽其所能释放善意。学会悲天悯人,渡人的同时渡己,始终走在止于至善的路上。真正的慈悲为怀,并不一定只是钱财的救济,有的时候,一个善举,也是一种慈悲。。
第二十六讲 FILTER函数在某个数据列中去除数据的方法
大家好今日继续VBA数组与字典解决方案的讲解,今日讲第26讲内容,利用FILTER函数求从工作表中数据多的列中去除数据少的列中数据的方法,也就是说,在工作表中有两列数据,一列数据多,一列的数据少,我们要用数组的方案在数据多的列中去除数据少的列中的数据。其实,这在实际的工作中也是常见的,用其他的方案也可以解决,我们今天的目的是结合数组的学习,灵活掌握FILTER函数的具体实际应用,在使用前一定要清楚,FILTER函数是模糊查找。
1 代码的应用场景
今日的内容中我们会涉及到一维数组,二维数组,动态数组及FILTER函数的利用。我们先看下面数据截图:
在上面的截图中,B列数据是数据少的列,要在A列中把和B列有重复的数据去掉。
2 实现场景的代码及代码解读
如何做到呢?我们看下面的代码:
Sub MyNZsz_26() '第26讲 把少数据在多数据中的重复值去除
Sheets("26").Select
Dim temvarArr1(), temvarArr2()
varArr1 = Range("A1:A" & Range("A1").End(xlDown).Row) '将A列数据写入数组
varArr2 = Range("B1:B" & Range("B1").End(xlDown).Row) '将B列数据写入数组
'将A列数据写入动态一维数组
ReDim temvarArr1(1 To UBound(varArr1)) '将A列数据写入动态一维数组
For i = 1 To UBound(varArr1)
temvarArr1(i) = varArr1(i, 1)
Next
'将B列数据写入动态一维数组
ReDim temvarArr2(1 To UBound(varArr2))
For i = 1 To UBound(varArr2)
temvarArr2(i) = varArr2(i, 1)
Next
'在数据多的列中去掉数据少列的值
If UBound(temvarArr1) >= UBound(temvarArr2) Then
tem = Filter(temvarArr1, temvarArr2(1), False) '给TEM赋初始值
For i = 2 To UBound(temvarArr2)
tem = Filter(tem, temvarArr2(i), False)
Next i
Else
tem = Filter(temvarArr2, temvarArr1(1), False) '给TEM赋初始值
For i = 0 To UBound(varArr1)
tem = Filter(tem, temvarArr1(i), False)
Next i
End If
'MsgBox Join(tem)'如果需要提升用户用此代码
Range("C1") = "多数据中去掉少数据重复值"
[c2].Resize(UBound(tem) + 1) = WorksheetFunction.Transpose(tem)
End Sub
代码截图:
代码讲解:
1)Dim temvarArr1(), temvarArr2() 定义了两个动态的数组。为什么要定义动态数组呢?因为我们FILTER函数用到的参数要在一维固定数组里完成,而一维数组的大小我们要根据实际情况的不同而改变。
2 ) ReDim temvarArr1(1 To UBound(varArr1)) '将A列数据写入动态一维数组 这句话是给出了一维数组的大小
3) For i = 1 To UBound(varArr1)
temvarArr1(i) = varArr1(i, 1)
Next
这段代码把数据从二维数组赋值给一位数组
4) tem = Filter(temvarArr1, temvarArr2(1), False) '给TEM赋初始值
这句代码实现了给TEM的赋初始值,以方便后续代码应用TEM
5) For i = 2 To UBound(temvarArr2)
tem = Filter(tem, temvarArr2(i), False)
Next i
这段代码中TEM是一个循环利用的过程,在其中不断的把数据的重复值去掉
下面我们是运行后的截图:
今日内容回向:
1 上述过程中哪些是一维数组,哪些是二维数组?
2 上述过程中动态数组的意义是什么?
我多年的VBA实践经验,全部浓缩在以下教程中: