TBH, я обычно нахожу Функция фильтра VBA почти бесполезной для повседневных требований программирования и редко использую ее, но в этом случае она кажется идеально подходящей для ваших целей, если вы установите опциональный третий [include / exclude] аргумент False.
В следующем предполагается, что вы хотите сохранить исходные значения в array1
, поэтому копия оригиналов делается в array3
, где толькоЗначения исключения сохраняются.Я также использовал vbTextCompare
вместо vbBinaryCompare
для операции фильтрации без учета регистра.Измените значение на vbBinaryCompare
для чувствительной к регистру операции.
Option Explicit
Sub arrayDiff()
Dim i As Long
Dim array1 As Variant, array2 As Variant, array3 As Variant
'populate array1 and array2
array1 = Array("A", "B", "C", "D")
array2 = Array("B", "C")
'make a working copy of array1 to process
array3 = array1
'loop through the elements in array2 and remove them from array3
For i = LBound(array2) To UBound(array2)
array3 = Filter(array3, array2(i), False, vbTextCompare)
Next i
'display results in Immediate window
Debug.Print "array3 = Array(""" & Join(array3, """,""") & """)"
'alternate result display
For i = LBound(array3) To UBound(array3)
Debug.Print array3(i)
Next i
End Sub
'results from Immediate window
array3 = Array("A","D")
A
D