I cicli

Transcript

I cicli
Introduzione alla Programmazione e Applicazioni per la
Finanza M2 (Prodotti Derivati)
Lezione 10
Anno accademico 2006-07
Titolare corso: Prof. Costanza Torricelli
Docente: Dott.ssa Marianna Brunetti
La sintassi di base del VBA - Condizioni e Cicli
La sintassi di base del VBA – Condizioni e Cicli
Cicli
Condizioni
Per prendere delle decisioni
¾
¾
¾
¾
¾
If ad una riga (o if semplice)
If … Else
If … ElseIf
If Nidificate
Select Case
Per ripetere le operazioni
¾Cicli a verifica dall’alto:
¾For
¾While…Wend
¾Do While… Loop
¾Do Until … Loop
¾Cicli a verifica dal basso:
¾Do Loop… While
¾Do Loop … Until
La sintassi di base del VBA - Condizioni e Cicli
Le condizioni If ed If … Else
1)
Funzioni in Excel
If ad una riga
If ad una
riga
Function Ifadunariga(parametro)
If parametro > 5 Then Ifadunariga = 1
End Function
2)
If ad una riga con valore iniziale
Function IfadunaRiga2(parametro)
IfadunaRiga2 = -16
If parametro > 5 Then IfadunaRiga2 = 1
End Function
3)
If …Else
Function IfElse(parametro)
If parametro > 5 Then IfElse = 1 Else IfElse = 15
End Function
-10
-9
-8
-7
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
7
8
9
10
La sintassi di base del VBA - Condizioni e Cicli
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
if ad una
riga con
valore
iniziale
-16
-16
-16
-16
-16
-16
-16
-16
-16
-16
-16
-16
-16
-16
-16
-16
1
1
1
1
1
If…Else
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
1
1
1
1
1
La condizione If… ElseIf
Si utilizza quando si deve eseguire più di una espressione condizionale
Funzione in Excel
Sintassi
If <condizione0> then
<espressioni se condizione 0 vera>
Function FunzioneElseIf(parametro)
If parametro < 0 Then
FunzioneElseIf = -1
ElseIf <condizione1> then
<espressioni se condizione 1 vera>
ElseIf <condizione2> then
<espressioni se condizione 2 vera>
ElseIf parametro = 0 Then
FunzioneElseIf = 0
…altri ElseIf………
End If
Else: FunzioneElseIf = 1
End Function
Else: <espressioni se tutti i confronti
falliscono>
End If
If…ElseIf
-10 -9
-8
-7
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
7
8
9
10
-1
-1
-1
-1
-1
-1
-1
-1
-1
0
1
1
1
1
1
1
1
1
1
1
-1
La sintassi di base del VBA - Condizioni e Cicli
If Nidificate
NB: ogni espressione if deve essere completa!
Esempio 1
Function SegnoUguale(P1, P2)
If P1 > 0 Then
If P2 > 0 Then SegnoUguale = 1 Else: SegnoUguale = 0
Else
If P2 < 0 Then SegnoUguale = -1 Else SegnoUguale = 0
End If
End Function
P1
11
22
-22
-57.3
6
-5
4
La sintassi di base del VBA - Condizioni e Cicli
P2
6
3
6
4
6
7
3
Segno
Uguale
1
1
0
0
1
0
1
If Nidificate (2)
Esempio 2
Function IfNidificata(P1, P2)
If P1 > 10 Then
If P2 > 5 Then IfNidificata = 1 Else IfNidificata = 2
ElseIf P1 < -10 Then
If P2 > 5 Then IfNidificata = 3 Else IfNidificata = 4
Else:
If P2 > 5 Then
If P1 = P2 Then IfNidificata = 5 Else IfNidificata = 6
Else:
IfNidificata = 7
End If
End If
P1
11
22
-22
-57.3
6
-5
4
End Function
NB: ogni espressione if deve essere completa!
La sintassi di base del VBA - Condizioni e Cicli
P2
6
3
6
4
6
7
3
IfNidificata
1
2
3
4
5
6
7
La condizione Select Case
Sintassi
Esempio di funzione per Excel
Select Case <variabile>
Function SelectCase (parametro)
Case <valore 1>:
<blocco istruzioni 1>
[Case <valore 2>:
<blocco istruzioni 2>]
………………
[Case <valore n>:
<blocco istruzioni n>]
Select Case (parametro)
Case 1:
SelectCase = 111
Case 2:
SelectCase = 222
Case 3,5,6:
SelectCase = 333
[Case Else:
<blocco istruzioni se tutti i precedenti falliscono>]
Case 4:
SelectCase = 444
End Select
Case Else:
SelectCase = 555
Parametro 0 1 2 3 3.5 4 5 6 7
Select Case 555 111 222 333 555 444 333 333 555
End Select
End Function
La sintassi di base del VBA - Condizioni e Cicli
Operatori logici: AND, OR, NOT
•
•
•
AND Î per verificare che le condizioni siano tutte contemporaneamente valide
OR Î per verificare che almeno una delle condizioni sia vera
NOT Î per verificare che le condizioni non siano valide
AND
Esempio: Voglio verificare se un parametro (n) è compreso tra 10 e 100
Caso 1 Î If Nidificate
Caso 2 Î AND
Function BooleanoAnd(n)
If (n > 10) And (n < 100) Then BooleanoAnd = 1 Else BooleanoAnd = 0
End Function
La sintassi di base del VBA - Condizioni e Cicli
1
10
12
50
65
72
99
100
101
BooleanoAnd
0
0
1
1
1
1
1
0
0
Operatori logici: AND, OR, NOT (2)
OR
Esempio: Voglio verificare se un parametro (n) è < di 10 o > 100
Function BooleanoOr (n)
If (n < 10) Or (n > 100) Then BooleanoOr = 1 Else BooleanoOr = 0
End Function
NOT
1
10
12
50
65
72
99
100
BooleanoOr
1
0
0
0
0
0
0
0
Esempio: Voglio verificare se un parametro (n) è diverso da 10 e da 100
Function BooleanNot(n)
If Not ((n = 10) Or (n = 100)) Then BooleanNot = 1 Else BooleanNot = 0
End Function
La sintassi di base del VBA - Condizioni e Cicli
1
10
12
50
65
72
99
100
101
BooleanNot
1
0
1
1
1
1
1
0
1
I cicli
¾ Cicli con verifica dall’alto : la condizione ciclica è verificata prima di
eseguire l’operazione
¾ Ciclo con verifica dal basso: la condizione ciclica è verificata dopo
aver eseguito l’operazione
For
Permette di ripetere una porzione di codice per un numero di
volte (n) che si conosce in anticipo
Sintassi
For <contatore> = <inizio> to <fine> [step <passo> ]
<istruzione 1>
……………….
<istruzione n>
Next [<contatore>]
La sintassi di base del VBA - Condizioni e Cicli
Esempi For : Calcolo n fattoriale
Esempio 1
Function For1(N As Integer)
Dim i As Integer
Dim j As Long
If N <= 1 Then
For1 = 1
Else
j=1
For i = 1 To N Step 1
j=j*i
Next i
For1 = j
End If
End Function
N
For1
-6.5
-4
0
1
1.4
2
3
4
4.5
5
6
7
8
9
10
1
1
1
1
1
2
6
24
24
120
720
5040
40320
362880
3628800
NB: se l’incremento è 1 => Step = 1 può anche essere omesso!
La sintassi di base del VBA - Condizioni e Cicli
Esempi For : Calcolo n fattoriale (2)
Esempio 2
Function For2(N As Integer)
Dim i As Integer
Dim j As Long
If n <= 1 Then
For2 = 1
Else
j=1
For i = N To 1 Step -1
j=j*i
Next i
For2 = j
End If
End Function
La sintassi di base del VBA - Condizioni e Cicli
N
-6.5
-4
0
1
1.4
2
3
4
4.5
5
6
7
8
9
10
For2
1
1
1
1
1
2
6
24
24
120
720
5040
40320
362880
3628800
For con Uscita Anticipata
Esempio
Function For3(P1, P2)
Dim i As Integer
Dim somma As Long
somma = 0
For i = 1 To P1 Step 1
somma = somma + i
If somma > P2 Then Exit For
Next i
For3 = somma
P1
1
2
3
4
5
6
7
8
9
10
11
12
13
End Function
La sintassi di base del VBA - Condizioni e Cicli
P2
22
22
22
22
22
22
22
22
22
22
22
22
22
For3
1
3
6
10
15
21
28
28
28
28
28
28
28
While… Wend
Permette di ripetere una o più espressioni fino a che una condizione è vera: il
numero di volte non è noto in anticipo!
Esempio di funzione in Excel
Sintassi
While <condizione>
<istruzione 1>
<istruzione 2>
……………..
<istruzione n>
Wend
NB: le n istruzioni devono
essere tali che la
condizione ad un certo
punto smetta di
verificarsi), altrimenti si
cade in un ciclo infinito Î
Task Manager
Function While1(n As Integer)
Dim i As Integer
Dim j As Long
If n <= 1 Then
While1 = 1
Else
i=1
j=1
While i <= n
j=j*i
i=i+1
Wend
While1 = j
End If
End Function
La sintassi di base del VBA - Condizioni e Cicli
N
-6.5
-4
0
1
1.4
2
3
4
4.5
5
6
7
8
9
10
While1
1
1
1
1
1
2
6
24
24
120
720
5040
40320
362880
3628800
Do While… Loop
Esegue zero o più volte una o più istruzioni finché una condizione è vera
Esempio di funzione in Excel
Sintassi
Do While <condizione>
<istruzione 1>
<istruzione 2>
……………..
<istruzione n>
Loop
Function DoWhile1 (n As Integer)
Dim i As Integer
Dim j As Integer
If n < 2 Then
DoWhile1 = 1
Else
i=1
j=1
Do While i <= n
j=j*i
i=i+1
Loop
DoWhile1 = j
End If
End Function
La sintassi di base del VBA - Condizioni e Cicli
N
-6.5
-4
0
1
1.4
2
3
4
4.5
5
6
7
8
9
10
Do While
…Loop
1
1
1
1
1
2
6
24
24
120
720
5040
#VALORE!
#VALORE!
#VALORE!
Do While… Loop (2)
Esempio di funzione in Excel
Function DoWhile2 (n As Integer)
Dim i As Integer
Dim j As Long
If n < 2 Then
DoWhile2 = 1
Else
i=1
j=1
Do While i <= n
j=j*i
i=i+1
Loop
DoWhile2 = j
End If
End Function
N
Do While
…Loop
Do While
…Loop2
-6.5
-4
0
1
1.4
2
3
4
4.5
5
6
7
8
9
10
1
1
1
1
1
2
6
24
24
120
720
5040
#VALORE!
#VALORE!
#VALORE!
1
1
1
1
1
2
6
24
24
120
720
5040
40320
362880
3628800
La sintassi di base del VBA - Condizioni e Cicli
Do Until… Loop
Permette di ripetere le istruzioni quando la condizione è falsa e le ripete
finché non si avvera.
Esempio di funzione in Excel
Sintassi
Do Until …
Function DoUntil(n As Integer)
Do Until <condizione>
<istruzione 1>
<istruzione 2>
……………..
<istruzione n>
Loop
Dim i As Integer
Dim j As Long
If n < 2 Then
DoUntil = 1
Else
i=1
j=1
Do Until i > n
j=j*i
i=i+1
Loop
DoUntil = j
End If
End Function
La sintassi di base del VBA - Condizioni e Cicli
N
-6.5
-4
0
1
1.4
2
3
4
4.5
5
6
7
8
9
10
Loop
1
1
1
1
1
2
6
24
24
120
720
5040
40320
362880
3628800
Do … Loop While
Permette di eseguire una o più istruzioni finché una condizione è vera
Sintassi
Esempio di funzione in Excel
Do
<istruzione 1>
<istruzione 2>
……………..
<istruzione n>
Loop While <condizione>
Function DoLoopWhile(n As Integer)
Dim i As Integer
Dim j As Long
If n < 2 Then
DoLoopWhile = 1
Else
i=1
j=1
Do
j=j*i
i=i+1
Loop While i <= n
DoLoopWhile = j
End If
End Function
La sintassi di base del VBA - Condizioni e Cicli
N
-6.5
-4
0
1
1.4
2
3
4
4.5
5
6
7
8
9
10
Do … Loop
While
1
1
1
1
1
2
6
24
24
120
720
5040
40320
362880
3628800
Do … Loop Until
Le iterazioni avvengono quando la condizione è falsa e terminano quando
si avvera.
Esempio di funzione in Excel
Sintassi
Do
<istruzione 1>
<istruzione 2>
……………..
<istruzione n>
Loop Until <condizione>
Function DoLoopUntil (n As Integer)
Dim i As Integer
Dim j As Long
If n < 2 Then
DoLoopUntil = 1
Else
i=1
j=1
Do
j=j*i
i=i+1
Loop Until i > n
DoLoopUntil = j
End If
End Function
La sintassi di base del VBA - Condizioni e Cicli
N
-6.5
-4
0
1
1.4
2
3
4
4.5
5
6
7
8
9
10
Do … Loop
Until
1
1
1
1
1
2
6
24
24
120
720
5040
40320
362880
3628800