Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

gestückelter For-Loop

Forumthread: gestückelter For-Loop

gestückelter For-Loop
25.09.2024 11:00:53
velo
Hallo zusammen,

gibt es eine Möglichkeit wie man einen For-Loop übersichtlich stückelt (z.B. von 4 zu 6, von 10 zu 14, ....).

Ich hab hierzu schon zwei Beispiel-Skripts erstellt, die das gleiche machen nur mit unterschiedlicher Vorgehensweise. Es funktioniert auch alles top nur ist mein Problem, dass bei einer größeren Skalierung das erste Skript viel zu lang und das zweite viel zu unübersichtlich ist.

Gibt es hier eine Möglichkeit das schöner zu lösen?

Hier noch mein Code :)
Sub Füllen()


Dim ws As Worksheet
Dim rng As Range
Dim strWert As String
Dim i As Integer

Set ws = ThisWorkbook.Worksheets("Tabelle4")
strWert = ws.Range("A1").Value

For i = 4 To 6
Set rng = ws.Cells(i, 1)
rng.Value = strWert & i
Next i

For i = 10 To 14
Set rng = ws.Cells(i, 1)
rng.Value = strWert & i
Next i

For i = 16 To 19
Set rng = ws.Cells(i, 1)
rng.Value = strWert & i
Next i

For i = 21 To 23
Set rng = ws.Cells(i, 1)
rng.Value = strWert & i
Next i

End Sub


Sub füllen2()


Dim ws As Worksheet
Dim rng As Range
Dim strWert As String
Dim i As Integer

Set ws = ThisWorkbook.Worksheets("Tabelle4")
strWert = ws.Range("A1").Value

For i = 4 To 23
If (i >= 4 And i = 6) Or (i >= 10 And i = 14) Or (i >= 16 And i = 19) Or (i >= 21 And i = 23) Then
Set rng = ws.Cells(i, 1)
rng.Value = strWert & i
End If
Next i



End Sub


Danke schonmal im Voraus!

VG
velo
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: gestückelter For-Loop
25.09.2024 12:17:32
Uduuh
Hallo,
noch ne Möglichkeit:
Sub Fuellen()

Dim ws As Worksheet
Dim strWert As String
Dim i As Integer

Set ws = ThisWorkbook.Worksheets("Tabelle4")
strWert = ws.Range("A1").Value

For i = 4 To 23

Select Case i
Case 7 To 9, 15, 20
'mach nix
Case Else
ws.Cells(i, 1).Value = strWert & i
End Select

Next i

End Sub

Gruß aus'm Pott
Udo
Anzeige
AW: gestückelter For-Loop
25.09.2024 12:18:48
Onur
For i = 4 To 23

if ( i>9 or i7) and i>15 and i>20 then ws.Cells(i, 1)=strWert & i
Next i
AW: gestückelter For-Loop
25.09.2024 12:24:57
daniel
HI
wenn die Blöcke regelmäßig sind (also immer gleicher Abstand und immer gleiche Länge), dann könnte man so mit einer zwei geschachtelten Schleifen arbeiten.
Dim x = as long

dim y as long
dim i as long
for x = 1 to 90 Step 10
for y = 0 to 2
i = x + y
Debug.Print i
next
next

das würde die Folge 1, 2, 3, 11, 12, 13, 21, 22, 23, ... 91, 92, 92 ergeben

in deinem Fall ist es aber nicht regelmäßig, dh du musst irgenwie die Schleifendaten bereitstellen ,bspw in einem weitern Array:
dim aaa, a

dim i as long
aaa = array(array(4, 6), array(10, 14), array(16, 19), array(21, 23))
for each a in aaa
for i = a(0) to a(1)
Debug.print i
next
next

das ergibt dann: 4, 5, 6, 10, 11, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23
Gruß Daniel
Anzeige
Danke für den guten Tipp :)
25.09.2024 12:50:31
velo
AW: gestückelter For-Loop
25.09.2024 12:28:07
Ulf
Hi,
~


Sub Füllen()

Dim ws As Worksheet
Dim rng As Range
Dim strWert As String
Dim i As Integer

Set ws = ThisWorkbook.Worksheets("Tabelle1")
strWert = ws.Range("A1").Value

For i = 4 To 23
Select Case i
Case 4 To 6, 10 To 14, 16 To 19, 21 To 24
ws.Cells(i, 1).Value = strWert & i
Case Else
'
End Select
Next
End Sub

hth
Ulf
Anzeige
Noch ein Gedicht...
25.09.2024 13:11:47
Yal
Moin,

Es scheint zwar eine gewisse Regelmässigkeit, bzw. bekannte Ausnahmen, aber verallgemeint kann man "Bereiche" wie folgt übergeben:

Sub Füllen()

Dim E
Dim i As Integer
Dim Arr

With ThisWorkbook.Worksheets("Tabelle4")
For Each E In Array("4 6", "10 14", "16 19", "21 23")
Arr = Split(E) 'trennt per Default auf Leerzeichen
For i = CInt(Arr(0)) To CInt(Arr(1))
.Cells(i, 1).Value = .Range("A1").Value & i
Next i
Next E
End With
End Sub


oder
Sub Füllen()

Dim i As Integer
Dim j As Integer
Dim Arr

Arr = Array("4, 6, 10, 14, 16, 19, 21,23")
With ThisWorkbook.Worksheets("Tabelle4")
For i = 0 To UBound(Arr) Step 2
For j = CInt(Arr(i)) To CInt(Arr(i + 1))
.Cells(j, 1).Value = .Range("A1").Value & j
Next i
Next E
End With
End Sub


VG
Yal
Anzeige
AW: Noch ein Gedicht...
25.09.2024 14:35:01
Yal
ääh, zweite Lösung muss ohne "" sein:
Arr = Array(4, 6, 10, 14, 16, 19, 21,23)
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige