Jämföra matriser
Här demonstreras en relativ okomplicerad teknik för att jämföra matriser (arrayer) med varandra. Resultatet kan antingen bli värden som finns i en lista men inte i den andra listan eller värden som förekommer i båda listorna.
I första exemplet jämförs två listor och där resultatet visar de värden som finns i Lista 1 men inte i Lista 2.
Option Explicit
Option Base 1
Sub Jamfora_MatriserI()
'© 2002 Alla rättigheter XL-Dennis
Dim rnData1 As Range, rnData2 As Range
Dim lnTal() As Long
Dim vaData1 As Variant, vaData2 As Variant
Dim i As Long, j As LongSet rnData1 = Range("A2:A6")
Set rnData2 = Range("B2:B6")
vaData1 = rnData1.Value
vaData2 = rnData2.Value
j = 1
For i = 1 To UBound(vaData2, 1)
'Varje gång sökning med PASSA-funktionen genererar #Saknas tilldelas
'matrisen värdet från Lista 1
If IsError(Application.Match(vaData1(i, 1), vaData2, 0)) Then
ReDim Preserve lnTal(j)
lnTal(j) = vaData1(i, 1)
j = j + 1
End If
Next iRange("C2").Resize(UBound(lnTal)).Value = Application.Transpose(lnTal)
End Sub
I det andra exemplet jämförs två listor och där resultatet visar de värden som finns i Lista 1 och i Lista 2.
Skillnaden mellan de två procedurerna är att "Not" finns angivet före "IsError".
Option Explicit
Option Base 1
Sub Jamfora_MatriserII()
'© 2002 Alla rättigheter XL-Dennis
Dim rnData1 As Range, rnData2 As Range
Dim lnTal() As Long
Dim vaData1 As Variant, vaData2 As Variant
Dim i As Long, j As LongSet rnData1 = Range("A2:A6")
Set rnData2 = Range("B2:B6")
vaData1 = rnData1.Value
vaData2 = rnData2.Value
j = 1
For i = 1 To UBound(vaData2, 1)
'Varje gång sökningen hittar motsvarande värde i Lista 2 från Lista 1
'tilldelas matrisen värdet från Lista 1.
If Not IsError(Application.Match(vaData1(i, 1), vaData2, 0)) Then
ReDim Preserve lnTal(j)
lnTal(j) = vaData1(i, 1)
j = j + 1
End If
Next iRange("D2").Resize(UBound(lnTal)).Value = Application.Transpose(lnTal)
End Sub