PDA

Vollständige Version anzeigen : Array filtern


A3XX
06.05.2004, 16:10
Wieso geht das nicht:


varParentIDs = Split(strParentIDs, ", ")
varTravelIDs = Split(strTravelIDs, ", ")

If ((UBound(varParentIDs) - LBound(varParentIDs) + 1) > (UBound(varTravelIDs) - LBound(varTravelIDs) + 1)) Then
intTotalIDs = (UBound(varParentIDs) - LBound(varParentIDs) + 1)
For intID = 0 To intTotalIDs
varIDs(intID) = Filter(varParentIDs, varTravelIDs(intID), True)
Next intID
Else
intTotalIDs = (UBound(varTravelIDs) - LBound(varTravelIDs) + 1)
For intID = 0 To intTotalIDs
varIDs(intID) = Filter(varTravelIDs, varParentIDs(intID), True)
Next intID
End If


Folgendes: In strParentIDs und strTravelIDs sind Ids enthalten in der Form 1, 2, 3 etc,
Die will ich jetzt je in ein Array nehmen
Dann prüfe ich welches Array gröser ist (-> in welchem ARray gesucht werden soll) und dann möchte ich ein Array aus den Übereinstimmungen zusammenbasteln
Aber irgendwie geht das nicht, VBA gibt mir immer dnen Fehler wegen der filter Methode, es seien entweder nicht genug Argumente, oder die ganze Methode hat nen Fehler...ich sehs nicht.

Könnt ihr mir helfen?




AD: Code-Tags korrigiert. S. dazu auch Darstellung von Code-Abschnitten (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=102899#usec).

Sascha Trowitzsch
06.05.2004, 19:22
So steht es in der VB(A)-Hilfe zu Filter:
Gibt ein nullbasiertes Datenfeld zurück, das eine Untermenge eines Zeichenfolgen-Datenfelds basierend auf festgelegten Filterkriterien enthält.

Da ich davon ausgehe, das varIDs(intID) kein Datenfeld darstellt, sondern lediglich ein Element eines Array, kann dein Code so wohl nicht funktionierten.
Filter muss einer Variant-Variablen zugewiesen werden.

Ciao, Sascha

A3XX
07.05.2004, 07:37
Aber auch so funktionierts nicht:


For intID = 0 To intTotalIDs
varIDs = Filter(varTravelIDs, varParentIDs(intID), True)
Next intID

Sascha Trowitzsch
07.05.2004, 09:14
Aber einen Syntaxfehler gibt's nun nicht mehr, oder?

Ich verstehe deine Schleife mit dem Filter nicht. Ich würde überhaupt Filter nicht einsetzen, sondern alle Elemente des des einen Arrays mit allen des anderen vergleichen.
Dann würde z.B. etwa folgender Code dabei rauskommen:

Function CompareStringsArr(S1 As String, S2 As String) As Variant
Dim arr1 As Variant, arr2 As Variant
Dim sRes As String
Dim i As Long, j As Long

arr1 = Split(S1, ",")
arr2 = Split(S2, ",")
For i = 0 To UBound(arr1)
For j = 0 To UBound(arr2)
If arr1(i) = arr2(j) Then sRes = sRes & arr1(i) & ","
Next j
Next i
sRes = Left(sRes, Len(sRes) - 1)
CompareStringsArr = Split(sRes, ",")
End Function


Ergebnis ist ein Array mit den übereinstimmenden IDs; das sollte funktionieren, solange die ID-Strings jeweils nur eindeutige IDs enthalten.

Ciao, SAscha

A3XX
07.05.2004, 09:22
Funzt perfekt, irgendwie kam ich nicht auf diesen Ansatz. Vielen Dank!