Kopieren Sie die Werte einer Sammlung in ein 2D-Array in VBA
Ich scheine gegen die sprichwörtliche Mauer zu stoßen. Ich habe eine Schleife, die eine Sammlung ausführt und auffüllt. Es gibt ungefähr 20000 Zeilen und 11 Spalten. Ich muss in der Lage sein, den Inhalt der Sammlung in ein Variantenarray zu übertragen, damit ich eine Massenkopie in ein Arbeitsblatt erstellen kann. Der Grund, warum ich eine Sammlung verwendet habe, ist die inhärente Deduplizierung von Einträgen.
Bitte könnte jemand einen Vorschlag machen, wie dies erreicht werden kann. Ich gehe davon aus, dass mir etwas fehlt, aber wenn ich keine Sammlung verwende, muss ich über 200.000 Zeilen deduplizieren.
Vielen Dank im Voraus für all Ihre Hilfe
BEARBEITEN
Hier ist der aktuelle Code. Wie ich oben erwähnt habe, besteht das Problem darin, dass die Daten nicht in die Sammlung (MyCollection) übernommen werden, sondern dass sie wieder freigegeben werden!
BEARBEITEN
Der Datenfluss beginnt in einem Arbeitsblatt, das dann in ein Array namens ArrayOrg kopiert wird. Das Array wird durchgeschleift, und wenn bestimmte Bedingungen erfüllt sind, wird ein Datensatz zum ArrayOrg1-Array hinzugefügt. Bitte beachten Sie den Code unten.
For intI = 1 To UBound(ArrayOrg())
If ArrayOrg(intI, 7) = "cMat" And ArrayOrg(intI, 5) = "Plant" Then
ArrayOrg1_cMat(Org1Count_cMat, 0) = ArrayOrg(intI, 1) 'User ID
ArrayOrg1_cMat(Org1Count_cMat, 1) = ArrayOrg(intI, 2) 'BR ID
ArrayOrg1_cMat(Org1Count_cMat, 2) = ArrayOrg(intI, 3) 'Scenario
ArrayOrg1_cMat(Org1Count_cMat, 3) = ArrayOrg(intI, 4) 'Role
ArrayOrg1_cMat(Org1Count_cMat, 4) = ArrayOrg(intI, 5) 'Controlling Field
ArrayOrg1_cMat(Org1Count_cMat, 5) = ArrayOrg(intI, 6) 'Controlling Field Value
ArrayOrg1_cMat(Org1Count_cMat, 6) = ArrayOrg(intI, 7) 'Webapp
Org1Count_cMat = Org1Count_cMat + 1
Next intI
Dim MyCollection As Collection
Dim ArrayTemp() As Variant
Set MyCollection = New Collection
For intI = 0 To UBound(ArrayOrg1_cMat())
For intJ = 0 To UBound(ArrayOrg2_cMat())
If ArrayOrg2_cMat(intJ, 0) = ArrayOrg1_cMat(intI, 0) Then
If ArrayOrg2_cMat(intJ, 1) = ArrayOrg1_cMat(intI, 1 Then If ArrayOrg2_cMat(intJ, 2) = ArrayOrg1_cMat(intI, 2) Then If ArrayOrg2_cMat(intJ, 3) = ArrayOrg1_cMat(intI, 3) Then
ArrayTemp(0, 0) = "" 'Name
ArrayTemp(0, 1) = ArrayOrg1_cMat(intI, 0) 'AD ID
ArrayTemp(0, 2) = "" 'Email
ArrayTemp(0, 3) = "" 'Requester
ArrayTemp(0, 4) = ArrayOrg1_cMat(intI, 6) 'Webapp
ArrayTemp(0, 5) = ArrayOrg1_cMat(intI, 2) 'Scenario
ArrayTemp(0, 6) = ArrayOrg1_cMat(intI, 3) 'Role
ArrayTemp(0, 7) = "PL" 'Business Unit
ArrayTemp(0, 8) = "NONE"
ArrayTemp(0, 9) = "NONE"
ArrayTemp(0, 10) = "NONE"
ArrayTemp(0, 11) = ArrayTemp(0, 0) & ArrayTemp(0, 1) & ArrayTemp (0, 2) & ArrayTemp(0, 3) & ArrayTemp(0, 4) _
& ArrayTemp(0, 5) & ArrayTemp(0, 6) & ArrayTemp (0, 7) & ArrayTemp(0, 8) & ArrayTemp(0, 9) _
& ArrayTemp(0, 10) '### This is the key for the collection
On Error Resume Next
MyCollection.Add ArrayTemp, ArrayTemp(0, 11)
On Error GoTo 0
End If
End If
End If
End If
Next intJ
Next intI
'#### THIS IS WHERE THE PROBLEM IS
For intI = 0 To MyCollection.Count
ArrayOutput(intI, 0) = MyCollection.Item(intI)
Next intI
Vielen Dank, Kevin