Microsoft Excel

Herbers Excel/VBA-Archiv

Array mit Prozedur ohne Dupletten füllen

Betrifft: Array mit Prozedur ohne Dupletten füllen von: Hendrik
Geschrieben am: 18.08.2014 11:44:04

Hallo zusammen,

folgende Prozedur verwende ich, um einem Array einen Wert hinzuzufügen, sofern er noch nicht im Array steht:

Sub ergaenzeArray(strArray() As String, strWert1 As String, strWert2 As String)
    Dim blnNeu As Boolean
    Dim i As Long
    
    blnNeu = True
    For i = 0 To UBound(strArray)
        If strArray(i, 0) = strWert1 Then
            blnNeu = False
            Exit For
        End If
    Next i
    
    If blnNeu = True Then
        If strArray(0, 0) = "" Then
            strArray(0, 0) = strWert1
            strArray(0, 1) = strWert2
        Else
            ReDim Preserve strArray(0 To i, 0 To 1)
            strArray(i, 0) = strWert1
            strArray(i, 1) = strWert2
        End If
    End If
End Sub
Wenn ich die Prozedur aufrufe
Call ergaenzeArray(strArrFilterKategorien(), "Test", "Tralalla"

und der Eintrag hinzugefügt werden soll, bekomme ich an der Stelle der Redim einen Abbruch ("Index außerhalb des gültigen Bereichs"). Warum?

Könnte man meine Prozedur ansonsten irgendwie optimieren?
Danke und Grüße
Hendrik

  

Betrifft: AW: Array mit Prozedur ohne Dupletten füllen von: Daniel
Geschrieben am: 18.08.2014 13:20:03

Hi

das Problem ist, dass du mit REDIM PRESERVE immer nur die letzte Dimension verändern kannst.
das liegt wahrscheinlich daran, dass VBA auch bei mehrdimensionalen Arrays die Werte im Speicher linear ablegt.
Die Werte der letzen Dimension liegen am Datenende, so dass es relativ problemlos ist, diese zu erweitern oder zu kürzen.
Bei Änderungen in den davorliegenden Dimensionen müssten alle Daten komplett neu angeordnet werden und das hat MS dann doch nicht umgesetzt (ist aber wie gesagt, nur eine Vermutung von mir)

wenn du die Variable in der ersten Dimension erweitern willst, müsstest du zunächst ein neues Array anlegen, welches um 1 grössser ist als das alte, dann per Schleife alle Werte aus dem alten Array ins neue übertragen und zum Schluss den neuen Wert am Ende eintragen.

Gruß Daniel


  

Betrifft: AW: Array mit Prozedur ohne Dupletten füllen von: Hendrik
Geschrieben am: 18.08.2014 14:41:22

Danke, Daniel!


  

Betrifft: anstatt einem Array ... von: Rudi Maintaire
Geschrieben am: 19.08.2014 10:18:00

Hallo,
kannst du auch eine Collection oder ein Dictionary nehmen.

Gruß
Rudi


 

Beiträge aus den Excel-Beispielen zum Thema "Array mit Prozedur ohne Dupletten füllen"