For Schleife mit Boolean = false funktioniert nicht nach Plan

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    For Schleife mit Boolean = false funktioniert nicht nach Plan

    Hallo liebe Community,

    ich komme nicht weiter, vielleicht könnt Ihr mir weiterhelfen - ein Hilfestellung wäre echt klasse.
    in Spalte I der Tabelle 1 habe ich in 2100 Zeilen 20 Länder in unterschiedlicher Anzahl (z.B. 350 mal "Deutschland")
    .In der For - Schleife sollen alle Doppler ausgeschlossen werden -> vgl mit Inhalt Array Bestimmungsland
    und raus bei gefunden(Boolean) = true.
    Es sollten am Ende 20 Länder in der Listbox erscheinen und die Anzahl auch angegeben werden in dem Label.
    So die Theorie, allerdings sagt VBA mir etwas anderes: Es erscheint nur ein Land in der Combo-Box und gezählt werden ca. 1.800 Länder :(
    Was stimmt denn nicht mit der Formel?
    Die Datei kann ich ja leider nicht mitliefern, da xlsm Format und nicht erlaubt....
    Dim Bestimmungsland() As String
    Dim land As Integer
    Dim i As Integer, znr As Integer
    Dim gefunden As Boolean
    znr = 2 'Die Größe des Arrays anpassen
    ReDim Preserve Bestimmungsland(land)Bestimmungsland(land) = Range("I" & znr)
    'Selection einmaliger Landbezeichnung
    While Range("I" & znr) <> "" gefunden = False
    For i = 0 To UBound(Bestimmungsland)
    If Bestimmungsland(i) = Range("I" & znr) Then
    gefunden = True
    Exit For
    End If
    Next
    If gefunden = False Then
    land = land + 1
    End If
    znr = znr + 1
    Wend
    land = land - i 'Größe des Arrays ausgeben lassen
    lbl_Bestimmungsland.Caption = "wählen Sie aus: " & land & " Ländern."
    'Kombo_Box füllen
    cmb_Bestimmungsland.List = Bestimmungsland
    End Sub

    VGJogg70
    Willkommen im Forum.
    Du kannst Deine XLSM zippen und dann hochladen.
    Nutze auch bitte CodeTags, siehe hier.
    Fangen wir mal oben an: Bestimmungsland ist ein Array - mit einer Eintragsanzahl von Null, da land nicht mit einem Wert versehen wurde.

    ##########

    Du müsstest das Redim Preserve immer dann ausführen, wenn ein neues Land dazukommt.

    ##########

    Alternativvorschlag:

    VB.NET-Quellcode

    1. Dim CountryList() As Variant
    2. CountryList = Range(Cells(1, 9), Cells(1, 9).End(xlDown))
    3. Dim DistinctCountries As New Scripting.Dictionary
    4. For i = 1 To UBound(CountryList)
    5. DistinctCountries(CountryList(i, 1)) = Empty
    6. Next
    7. Dim CountryCount As Integer
    8. CountryCount = DistinctCountries.Count


    Zeile#3 klappt allerdings nur, wenn Du vorher im Menü bei Extras -> Verweise: Microsoft Scripting Runtime einbindest. Ansonsten müsstest Du mit CreateObject arbeiten.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()