Gjentakelser
En kodeblokk kan gjentas flere ganger, i det man kaller løkker eller iterasjoner.
For Next
Med For...Next er antallet bestemt ved hjelp av en teller med start- og sluttverdi (og, hvis en vil, en stegverdi). Ofte brukes navnene i, j og k som tellere, som under der i antar verdiene 1, 2, 3, 4 og 5 (fem iterasjoner):
For i = 1 To 5
...
Next i
Det siste som skjer i kodeblokken er implisitt, at telleren inkrementeres med stegverdien. Vil en ha annen stegverdi enn 1 (en) brukes "step". I eksempelet under brukes desimaltall i stegverdi og i yttergrensene.
For temp = -2.3 to 14.7 step 3.2
...
Next temp
Her blir "temp" -2.3, 0.9, 4.1, 7.3, 10.5, 13.7. I siste iterasjon blir verdien 16.9 som er mer enn yttergrensen 14.7, og gjentakelsene avbrytes da. Kodeblokken ble da eksekvert 6 ganger. Alle slags tallverdier er tillatt som stegverdi og yttergrenser.
Vil en bryte ut prematurt brukes "Exit for" som i:
For I = 1 To 10
If I = 5 Then
Exit For
End If
...
Next I
For Each
Med For Each...Next kan en behandle alle elementer i en liste, som i
Dim a(3,4) as String
...
For Each ting In a()
...
Next i
Listen har 4*5=20 element og det blir da 20 gjentakelser. Variabel "ting" er det gjeldende sted i tabellen.
Do...Loop
Med Do...Loop gjentas blokken inntil en betingelse (med boolsk type) inntreffer. Fire variasjoner finnes.
- Med Do While...Loop som i:
gjentas blokken inntil A er under 10.
Do While A > 10 ... Loop
- Med Do Until...Loop, som i
gjentas blokken inntil A overstiger 10.
Do Until A > 10 ... Loop
- Med Do...Loop While som i
Do ... Loop While A > 10
blir betingelsen sjekke ETTER at blokken er eksekvert, og gjentakelsen avbrutt hvis A er 10 eller mindre.
- Med Do...Loop Until, som i
er det som over, men betingelsen for fortsettelse er at A er under 10.
Do ... Loop Until A > 10
Prematurt avbrudd skjer med Exit Do, som f.eks. i
Do
If A = 4 Then
Exit Do
End If
...
Loop While A > 10
While...Wend
Med While...Wend vil omtrent det samme skje, men man har ikke noen Exit. To ekvivalente gjentakelser er:
Do While A > 10
...
Loop
While A > 10
...
Wend
Evige gjentakelser
En evig gjentakelse er kanskje det man vil ha. Den har ingen sluttbetingelse, eller en sluttbetingelse som aldri blir sann.
Do
...
Loop
Do While 2 = 3
...
Loop
For i = 1 to 10
...
i = 1
Next i
En kan jo legge inn prematurt avbrudd hvis det trengs.
Sortering
Et eksempel, litt avansert, er sortering. Under er en algoritme (et program) for boblesortering, der den minste verdien vil "boble" frem til siste plass i tabellen. Den bruker "nested" gjentakelse, en inni en annen.
Sub Sort
Dim Entry(1 To 10) As String
Dim Count As Integer
Dim Count2 As Integer
Dim Temp As String
Entry(1) = "Patty"
Entry(2) = "Kurt"
Entry(3) = "Thomas"
Entry(4) = "Michael"
Entry(5) = "David"
Entry(6) = "Cathy"
Entry(7) = "Susie"
Entry(8) = "Edward"
Entry(9) = "Christine"
Entry(10) = "Jerry"
For Count = 1 To 9
For Count2 = Count + 1 To 10
If Entry(Count) > Entry(Count2) Then
Temp = Entry(Count)
Entry(Count) = Entry(Count2)
Entry(Count2) = Temp
End If
Next Count2
Next Count
For Count = 1 To 10
Print Entry(Count)
Next Count
End Sub
Les mer om Boblesortering.
Content on this page is licensed under the Public Documentation License (PDL). |