Informatica per la Finanza 5 Array Cicli iterativi Contenuto di cella 28/02/2014 Copyright 2005-2013 V. Moriggia 1 28/02/2014 7.2 ARRAY V. Moriggia 1
28/02/2014 5.3 Esercizio Trovare il maggiore tra 3 numeri Trovare il maggiore tra 4 numeri Trovare il maggiore tra 10 numeri 28/02/2014 5.4 Array Collezione di dati omogenei identificata da un nome Array a 1 dimensione: vettore Array a 2 dimensioni: matrice Array a più dimensioni V. Moriggia 2
28/02/2014 5.5 Array Dichiarazione: Dim nome (dimensione) Ad es.: Dim a(10) Impiego: nome (indice) Ad es.: a(2) = 35 28/02/2014 5.6 Scorrimento di una zona Utilizzando l istruzione range: Range("A1") Range("A2") devo costruire la stringa contenente l indirizzo: "A1" e "A2" "A" & k in alcuni casi servirà la funzione str() V. Moriggia 3
28/02/2014 7.7 CICLI ITERATIVI 28/02/2014 7.8 Cicli iterativi For contatore=inizio To fine next While (condizione) Wend Loop (confronta la guida in linea) V. Moriggia 4
28/02/2014 7.9 Ciclo For For contatore = inizio To fine [Step passo] Next [contatore] Esempio: Con il VBA, inserire dalla cella A1 alla cella A10 i valori di e i con i che va da 1 a 10 FOR For CONTA:=INIZIO CONTA <= FINE F V CONTA:= CONTA+1 V. Moriggia 5
FOR While CONTA <= FINE F V 28/02/2014 7.12 Ciclo While While (condizione) Wend Esempio: Sommare tutti i valori precedentemente inseriti nella prima riga, partendo dalla cella A1 e fermandosi quando il totale supera 1000 V. Moriggia 6
28/02/2014 7.13 Quale ciclo iterativo usare? Tutte le volte in cui un indice deve scorrere da un inizio a una fine: i 1,...,n For i=1 To n Tutte le volte in cui un indice deve scorrere sotto una certa condizione: i ( a b) While ((a-b) < eps) Esercizio Sommare tutti i numeri contenuti nella colonna A fino al numero -1 (escluso) Calcolare la media dei numeri contenuti nella colonna A (fino alla prima cella vuota) che hanno la parte intera PARI V. Moriggia 7
28/02/2014 8.15 Ciclo Do Loop Do While (condizione) Loop oppure Do Loop While (condizione) FOR Do Loop While V CONTA <= FINE F V. Moriggia 8
28/02/2014 8.17 Tutto sul Do Loop Do [{While Until} condizione] [] [Exit Do] [] Loop Do [] [Exit Do] [] Loop [{While Until} condizione] 28/02/2014 8.18 Istruzione Exit per l uscita da un ciclo For contatore = inizio To fine if (condizione) Then Next Exit For Do Do While (condizione) if (condizione) Then Exit Do Loop if (condizione) Then Exit Do Loop V. Moriggia 9
28/02/2014 8.19 Esempio k=1 x=range("a" & k).value While x <> -1 s=s+x k=k+1 x=range("a" & k).value Wend k=1 Do x=range("a" & k).value If x <> -1 Then _ Exit Do s=s+x k=k+1 Loop 28/02/2014 7.20 SCORRIMENTO DI CELLE V. Moriggia 10
28/02/2014 7.21 Scorrere le celle attraverso l operatore & Dim s As String s = "A" & i Range(s).Value = i "A"&i 1 A1 2 A2 3 A3 4 A4 28/02/2014 5.22 Attributi di Range Che numero ha la colonna HZ? Debug.Print Range("HZ1").Address $HZ$1 Debug.Print Range("HZ1").Value abc Debug.Print Range("HZ1").Formula =HY1 Debug.Print Range("HZ1").Column 234 V. Moriggia 11
28/02/2014 7.23 Cells In alternativa a Range(stringa).Value = possiamo utilizzare l oggetto Cells(riga, colonna).value = dove riga e colonna sono due valori INTERI 28/02/2014 5.24 Esercizio Data una matrice (tabella) di numeri in Excel, creare una macro che colori di blu (e grassetto) il valore maggiore e di rosso (e grassetto) il valore minore. Il primo dato si trova in cella B2 e gli estremi della matrice sono attorniati da celle vuote. V. Moriggia 12
28/02/2014 7.25 Range e Cells Avendo degli indici che scorrono su una ZONA (anziché sulla singola cella) si può utilizzare Range(Cells(1,1),Cells(5,2)).Value = che equivale a Range("A1:B5").Value = ma è dinamico 28/02/2014 5.26 Lettura di una zona Con il comando Range è possibile caricare un intera zona: X = Range("A1:B5").Value X = Range("elencodati").Value For k = LBound(x) To UBound(x) V. Moriggia 13
28/02/2014 7.27 Esempi Sommare tutti i valori precedentemente inseriti nella colonna A, partendo dalla cella A1 e fermandosi quando la somma diventa maggiore di 1000 Contare i numeri pari contenuti nella colonna A. L elenco termina con -1 Scrivere una subroutine che calcoli la media dei numeri maggiori di 500 contenuti nella colonna A, sapendo che contiene 70 dati. Se non conoscessimo a priori quanti numeri contiene la colonna A? 28/02/2014 7.28 Esempi Scrivere una subroutine che calcoli i primi 3 momenti dei numeri contenuti nella colonna A, sapendo che contiene 70 dati. Se non conoscessimo a priori quanti numeri contiene la colonna A? V. Moriggia 14