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.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

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