VBA Schleife
#1
Huhu Leute,

ich habe hier folgenden Code:

Code:
  If Range("F29").Value <> "END" Then
   .AddItem Range("F29").Value   'Index 0
  End If
  If Range("G29").Value <> "END" Then
   .AddItem Range("G29").Value
  End If
  If Range("H29").Value <> "END" Then
   .AddItem Range("H29").Value
  End If
   If Range("I29").Value <> "END" Then
   .AddItem Range("I29").Value
  End If
  If Range("J29").Value <> "END" Then
   .AddItem Range("J29").Value
  End If
  
Das ist nur ein Ausschnitt.
In X-Achsenrichtung stehen Jahreszahlen. 2019, 2020, 2021....
Irgendwann steht dort END - das variiert je nach Einstellung.
Ich möchte einer Dropdownliste alle Jahreszahlen BIS zu diesem END einfügen.
Also bei 2019, 2020, 2021, END, END, END ---> dann soll die Dropdown enthalten: 2019, 2020, 2021
Mein Code oben funktioniert auch - allerdings ist das doch sehr umständlich und viel Code.
Kann man das mit einer Schleife eleganter machen?
Top
#2
Da brauchst du keine Schleife (geht natürlich auch), nutze einfach die Range.Find-Methode, um die Spalte mit END zu finden.
Schöne Grüße
Berni
[-] Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:
  • DieMarie
Top
#3
(21.01.2019, 13:06)MisterBurns schrieb: Da brauchst du keine Schleife (geht natürlich auch), nutze einfach die Range.Find-Methode, um die Spalte mit END zu finden.

Wie würde das dann ca. aussehen?

Code:
With Worksheets(1).Range("F29:Y29")
   Set c = .Find(<>"END", lookin:=xlValues)
   If Not c Is Nothing Then
       firstAddress = c.Address
       Do
           .AddItem Range("F29").Value
            .AddItem Range("G29").Value
           ....
        Loop While Not c Is Nothing And c.Address <> firstAddress
   End If
End With

Ich habe die Methode noch nie genutzt und habe daher keine Ahnung.
Beispiele im Internet suchen damit immer nur bestimmte Werte. Wie man damit eine fortlaufende Jahreszahl bis zum Wert END prüft und jedes Mal .AddItem mit dem Wert ausführt ist mir noch nicht so ganz klar.

Die Werte stehen in F29:Y29.

Es wäre super lieb, wenn mir jemand einen Tipp gibt :)
Top
#4
Das geht zB so

Code:
Sub test1()
Dim Suche As Range
Dim i As Integer

Set Suche = Range("F29:Y29").Find(what:="END", lookat:=xlWhole)
If Not Suche = Nothing Then
   For i = 6 To Suche.Column - 1
   Userform1.Combobox1.AddItem Cells(29, i)
   Next i
End If

End Sub

oder so

Code:
Sub test2()
Dim i As Integer

i = 6
Do While Cells(29, i) <> "END" And i <= 25
   Userform1.Combobox1.AddItem Cells(29, i)
   i = i + 1
Loop

End Sub
Schöne Grüße
Berni
[-] Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:
  • DieMarie
Top
#5
Super, danke :)

Funktioniert einwandfrei.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste