+ All Categories
Home > Documents > GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf ·...

GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf ·...

Date post: 15-Feb-2019
Category:
Upload: phamhanh
View: 229 times
Download: 1 times
Share this document with a friend
30
GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro excel ovvero la realizzazione di grafici attraverso la colorazione delle celle. Occorre in primo luogo avere una qualche nozione inerentemente due aspetti di excel, le macro e la formattazione condizionale. LE MACRO Le macro sono dei programmi scritti in un particolare linguaggio, il VBA (simile al vecchio basic). Tuttavia non sempre è necessario specificare tutto il codice. Esiste l’ opzione “registra macro” tramite la quale è possibile registrare e tradurre automaticamente in linguaggio VBA le operazioni che vengono svolte sul foglio durante la registrazione. Attivazione delle macro La scritta Macro dovrebbe comparire all’ estrema destra della barra multifunzione una volta clickato su “visualizza” Qualora la dicitura non compaia significa che esse non sono attivate. La procedura di attivazione, peraltro molto semplice, dipende dalla versioni di excel e quindi per essa si rimanda alla guida relativa od eventualmente ad altre spiegazioni che troverete facilmente in rete. UN PRIMO ESEMPIO DI APPLICAZIONE La carta quadrettata
Transcript
Page 1: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

GRAFICI CON EXCEL

In quest’ articolo vedremo un uso particolare del foglio di lavoro excel ovvero la realizzazione di grafici attraverso la colorazione delle celle. Occorre in primo luogo avere una qualche nozione inerentemente due aspetti di excel, le macro e la formattazione condizionale.

LE MACRO

Le macro sono dei programmi scritti in un particolare linguaggio, il VBA (simile al vecchio basic). Tuttavia non sempre è necessario specificare tutto il codice. Esiste l’ opzione “registra macro” tramite la quale è possibile registrare e tradurre automaticamente in linguaggio VBA le operazioni che vengono svolte sul foglio durante la registrazione.

Attivazione delle macro

La scritta Macro dovrebbe comparire all’ estrema destra della barra multifunzione una volta clickatosu “visualizza”

Qualora la dicitura non compaia significa che esse non sono attivate. La procedura di attivazione, peraltro molto semplice, dipende dalla versioni di excel e quindi per essa si rimanda alla guida relativa od eventualmente ad altre spiegazioni che troverete facilmente in rete.

UN PRIMO ESEMPIO DI APPLICAZIONE

La carta quadrettata

Page 2: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Avere a disposizione della carta quadrettata tipo quella dei quaderni può essere utile per realizzare ad esempio disegni con paint per problemi di natura geometrica. La distanza tra due righe è di ventipixel e dunque per ottenere la carta quadrettata occorrerebbe trascinare ogni colonna in modo che anche la distanza tra esse sia di 20 pixel. Attraverso le macro la cosa è invece fattibile in pochi passaggi. Aprite un figlio di lavoro e nel menù a tendina Macro clickate su Registra macro. Vi comparirà una piccola finestra con dove la macro viene denominata Macro1. Clickate su ok.Da questo momento tutto quello che fate viene registrato. Sul foglio di lavoro trascinate il bordo destro della colonna A in maniera fino a quando la larghezza diviene di 20 pixel. A questo punto avrete chetutta la colonna A sarà sotto forma di quadretti. Cliccate quindi su Macro e quindi su Interrompi registrazione. Ora clickate ancora su macro e quindi su Visualizza macro.Viene visualizzata una sola Macro ovviamente, la Macro1. Clickate su modifica. Se tutto è andato per il verso giusto apparirà questo

Qualora il codice non corrispondesse è segno che avete sbagliato qualcosa. Potete chiudere la pagina tramite la x rossa in alto a sinistra e ritrovarvi sul foglio di lavoro excel. Clickando ancora suMacro e visualizza macro provvedete ad eliminare Macro1 tramite l’ opzione elimina. Ripetete quindi il procedimento ove questa volta la macro verrà denominata Macro2.Quanto scritto sopra è un primo esempio di codice VBA. La macro iniziano con la scritta Sub seguita da nome e terminano con End Sub. Le istruzioni precedute dall’ apice ed anche l’ apice solitario, in pratica la parte scritta in verde, sono dei commenti. Si tratta di pezzi di codice ignorati in fase di esecuzione che che vengono aggiunti dal programmatore per leggere il codice più chiaramente. Questo significa che la parte verde può essere cancellata senza che l’ esecuzione della macro sia mutata. Il cuore della Macro è l’ istruzione

Coluns(“A:A”).ColomumWidth = 2.14

Essa riassume quello che è statto durante la registrazione. Le colonne che vanno da A a A (ovvero lacolonna A unicamente) è stata impostata con una larghezza pari a 2.14 (misura che corrisponde a 20pixel). Per ottenere la carta quadrettata modifichiamo questa istruzione imponendo di fare la medesima operazione non solo sulla colonna A ma su un sacco di colonne ad esempio fino alla colonna ZZ. Sostituiamo quindi ZZ alla deconda A

Coluns(“A:ZZ”).ColomumWidth = 2.14

Ancora torniamo sul foglio di lavoro clickando sulla x rossa e torniamo nel menù macro. Su visualizza macro la Macro1 è già evidenziata. Clickiamo su esegui. Otteniamo il risultato seguente

Page 3: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

La carta quadrettata nel foglio di lavoro può essere utile ad esempio per disegnare giochi (parole crociate , sudoku), per particolari tabelle o per altro. Se poi si esegue uno screenshot (comando stamp) e la si apre su paint (comando incolla) si ha carta quadrettata a disposizione sulla quale disegnare.

Istruzioni VBA

Per quel che riguarda scrittura della macro in linguaggio VBA è sufficiente conoscere l’ essenziale del linguaggio. Per quel che riguarda le assegnazioni, ovvero la copiatura di valori dal foglio di lavoro alla macro e viceversa, abbiamo due metodi.

1) Ricopiare all’ interno della macro il valore di una cella Se ad esempio vogliamo ricopiare il contenuto della cella A1 nella variabile interna x si usano queste istruzioni

Page 4: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Range("A1").Select x = ActiveCellIn pratica la cella viene “attivata” dalla prima istruzione e successivamente copiata.Se si scambiano gli elementi della seconda istruzione, ovvero Activecell=x, si fa il passaggio inverso ovvero si copia il contenuto della variabile x nella cella A1

2) Ricopiare una matrice del foglio di lavoro in una matrice internamente Consideriamo una matrice avente cella in alto a sinistra A1 e cella in basso a destra E6. Si tratta Quindi di una matrice di 6 righe per 5 colonne. Per ricopiarne i valori in una matrice a delle stesse dimensioni all’ interno della macro si usa questa istruzione

a=Range(“A1:E6”).value

A questo punto la in vari elementi della matrice a sono identificati all’ interno della macro con gli indici riga e colonna. Per esempio a(2,1) corrisponde inizialmente all’ elemento in seconda riga e prima colonna della matrice del foglio di lavoro ovvero al valore della cella B1. Gli elementi della matrice A possono essere modificati all’ interno della macro. Per copiare i valori della matrice a nella matrice del foglio di lavoro si usa l’ istruzione inversa Range(“A1:E6”).value = a

Altre istruzioni

Oltre alle assegnazioni le istruzioni che verranno utilizzate sono ridotte all’ essenziale1) Istruzione se…. allora if condizione then istruzione istruzione ………… end if

Si tratta di un costruttore presente in tutti i linguaggi di programmazione. Se la condizione che se segue If è vera allora vanno esetuite tutte le istruzioni fino all’ istruzione end if.

2) Ciclo FOR...NEXT For n=1 to 10 istruzione istruzione ……….. next n

Anche questo costruttore è presente in varie forme in tutti i linguaggi di programmazione. Le istruzioni comprese tra la riga For ..to e next vengono eseguite il numero di volte specificato (in questo caso 10). In pratica ad ogni iterazione la variabile n viene incrementata di 1 fino a che raggiunge il valore 10 dopo di che il ciclo si interrompe.

Spesso i vari costruttori saranno annidati li uni dentro altri (avremo cicli con all’ interno istruzioni Ifad esempio) e questo potrà dare luogo a codici non del tutto banali.

Page 5: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

I commenti

I commenti sono parti di codice ignorati in fase di esecuzione. Sono introdotti dall’ apice ‘ e sono colorati verdi. I commenti servono per rendere più chiaro il codice al programmatore tramite notazioni sul perché si sia utilizzata una certa sequenza di istruzioni od altro.

LA FORMATTAZIONE CONDIZIONALE

La formattazione condizionale permette tra l’ altro di colorare le celle a seconda del valore inserito in esse. Per sperimentarla si apra una foglio di lavoro.Si evidenzi ad esempio la zona avente quale cella in alto a sinistra A1 ed in basso a destra E5. Si aggiunga un bordo intorno. Successivamente si clicki su Formattazione condizionaleSi apre un menù a tendina e si scelga “regola evidenziazione celle”Nel successivo menù si scelga “Uguale a...”Nella barra si metta il valore 1 Nel menù a tendina si scelga “formato personalizzato”Si scelga quindi l’ opzione “Riempimento”Si scelga il colore rosso e quindi due volte su ok per uscire dalla formattazione.

A questo punto si vada sul foglio di lavoro nella zona selezionata. Se si assegna il valore 1 ad una delle celle si nota che questa si colora di rosso.

IL FOGLIO SUL QUALE OPERIAMO

Ora apriamo un nuovo foglio di lavoro. Lo chiamiamo ad esempio GRAFICI EXCEL .Per il primo salvataggio è necessario utilizzare l’ opzione cartella di lavoro con attivazione macro diExcel (successivamente basterà clickare su Salva semplicemente). Alla riapertura della cartella talvolta potrà comparire un barra gialla nella quale si specifica che le macro sono state disattivate per sicurezza. Occorre autorizzare la riattivazione.

La zona di disegno

Quale prima cosa da fare è creare una zona nella quale proporre i grafici. Questo viene fatto creandoun quadrato di dimensione di dimensione 500 per 500 composto da microcelle di dimensione 1 pixel per un pixel. Si potrebbe operare come nel caso della carta quadrettata ma, dal momento che è difficile realizzare manualmente celle di dimensione 1 pixel per 1 pixel è meglio scrivere il codice direttamente.Sub Macro1()

Columns("A:SF").ColumnWidth = 0.08Rows("1:500").RowHeight = 0.75

End Sub

Clickiamo quindi su Visualizza, Macro e quindi su visualizza macro. Ovviamente non ci sono macro. Scriviamo il nome che vogliamo dare alla nostra macro, Macro1. Viene evidenziata l’ opzione Crea ed una volta clickato su di essa si ricopia il codice.

Page 6: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Eseguendo il codice tramite l’ opzione esegui che compare il foglio di lavoro si colora di grigio.

Si nota subito che se si clicka sulla zona in alto a sinistra viene evidenziato un quadratino di dimensione un pixel per un pixel. Se sei clicka invece dalla colonna SG in poi allora viene evidenziata una cella avente dimensione orizzontale 20 pixel ed una dimensione verticale 1 pixel .La zona nella quale verranno rappresentati i grafici è quella che va dalla cella A1 alla cella SI500. La evidenziamo azzurro chiaro.Le due istruzioni chiave di tutte le macro saranno

Range(“A1:SI500”).valuea=Range(“A1:SI500”).value

I COLORI

Per poter realizzare i grafici dobbiamo associare un colore ad ogni pixel della zona di disegno a seconda del valore numerico di questa. Stabiliamo quindi le seguenti convenzioni

1→ COLORE NERO2→ COLORE ROSSO3→ COLORE VERDE4→ COLORE BLU5→ COLORE GIALLO6→ COLORE ARANCIO

Eventuali altri colori saranno definiti all’ occorrenza.Ora occorre armarsi di pazienza ed eseguire una formattazione condizionale per ciascuno di questi colori. Si evidenzi quindi la zona che va da A1 a SI 500 (anche se nono perfettamente è lo stesso) e si proceda come visto i precedenza associando ad ogni colore il valore numerico corrispondente.

Page 7: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

IL PIANO CARTESIANO

E’ giunto il momento di fare il primo disegno. Disegnamo due rette perpendicolari che dividono il la zona di disegno in 4 parti uguali. Disegnamo gli assi coordinati rossi. Questo viene fatto ponendouguale a 2 il valore di tutti gli elementi della 250esima riva e della 250esima colonna. Utilizzeremo sempre la convenzione di indicare con i gli indici riga e con j gli indici colonna (anche se per questocodice si potrebbe utilizzare la stessa variabile)Andiamo quindi sulla visualizzazione delle macro e creiamo una nuova macro che chiamiamo CARTESIANO (nei nomi delle macro gli spazi non sono ammessi e quindi PIANO CARTESIANO non sarebbe accettato).

Codice

Sub CARTESIANO()a = Range("A1:SI500").Value

For i = 1 To 500a(i, 250) = 2Next i

For j = 1 To 500a(250, j) = 2Next j

Range("A1:SI500").Value = aEnd Sub

Il significato delle istruzioni è immediato. I valori della 250esima riga e della 250esima colonna della matrice sono posti uguali a 2 che per convenzione equivale al colore rosso.

Risultato

Page 8: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Cambiando i valori delle assegnazioni si possono ottenere assi di colorati diversamente.

Il debug

Se si commette un errore in fase di scrittura del codice l’ esecuzione della si interrompe e segnala l’ errore. Prendiamo la macro precedente e la modifichiamo mettendo 501 quale limite di terminazione del primo ciclo. Si tratta di un errore evidente dato che nella matrice la 501esima colonna non esiste. Compare un messaggio di questo tipo

Viene specificato il tipo di errore come si vede. Clickando su debug si torna sul codice della macro e la linea dove si è interrotta l’ esecuzione, ovvero quella ove è presente l’ errore, è evidenziata in giallo. Si corregge l’ errore riportando il valore a 500. Quindi si esce dal codice della macro tramite la X rossa in alto a sinistra. Viene mostrato un avviso che dice che proseguendo le operazioni di correzione verranno terminate. Si dà OK e si torna sul foglio di lavoro. A questo punto la macro torna a funzionare correttamente.

I PULSANTI

I pulsanti sono delle figure che possono essere inserite nel foglio di lavoro alle quali è possibile associare l’ esecuzione di una macro. Andiamo su inserisci forme e scegliamo una forma rettangolare non troppo grande. Mettiamo tale forma a fianco della zona di disegno. Possiamo anchecopia e incollare il rettangolo in modo da averne a disposizione altri due allineati verticalmente con il precedente. Possiamo colorare il primo rettangolo di rosso e scrivere internamente PIANO CARTESIANO. A questo punto si clicka con il pulsante destro sulla forma e nel menù a tendina si sceglie Assegna Macro. A quel punto si seglie la macro CARTESIANO e si clicka su ok. Da questo momento clickando sul pulsante verrà eseguita la macro CARTESIANO.

Page 9: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

La cancellazione

Per cancellare una figura basta porre uguali a zero tutti gli elementi della matrice. Potrebbe essere fatto con un registra macro ma per essere più precisi scriviamo un semplice codiceCodiceSub CANCELLA()a = Range("A1:SI500").ValueFor i = 1 To 500For j = 1 To 500a(i, j) = 0Next jNext iRange("A1:SI500").Value = aEnd Sub

Associamo questa macro al terzo pulsante,quello azzurro.

Il reticolo

Per poter realizzare grafici e per posizionarli correttamente si può utilizzare un reticolo. In questo caso la zona di disegno è stata suddivisa in quadrati di di lato 50 pixel.

Page 10: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Sub RETICOLO()a = Range("A1:SI500").Value'per prima cosa delimitiamo in nero i bordi della zona in modo da avere una figura meglio definitaFor i = 1 To 500a(i, 1) = 1a(i, 500) = 1Next i

For j = 1 To 500a(1, j) = 1a(500, j) = 1Next j

'ora possiamo disegnare il reticolo che è composto internamente da 9 righe e 9 colonne distanti tra loro 50 pixel

For i = 1 To 9ii = i * 50 ' riga di riferimentoFor j = 1 To 500a(ii, j) = 1Next jNext i

For j = 1 To 9jj = j * 50 ' colonnaFor i = 1 To 500a(i, jj) = 1Next iNext j

Range("A1:SI500").Value = aEnd Sub

Page 11: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

In questo caso dopo la macro RETICOLO è stata eseguita anche la macro CARTESIANO.

LA SCALA

Nei grafici vengono rappresentate delle funzioni o dei disegni in un quadrato di dimensione 500 per 500 pixel. Occorre quindi definire a quante unità degli assi coordinati x,y corrisponde un pixel. Esistono due metodi per definire la scala. Si può semplicemente specificare appunto a quanto corrisponde un singolo pixel. Un’ alta maniera è quella di definire quale siano i limiti nei quali viene rappresentato il disegno. Chiamiamo questa unità di misura lim (abbreviazione di limite). Se lim=700 ad esempio significa che la funzione od il disegno sono rappresentati su di un intervallo delle ascisse che va da -700 a +700. Ne diriva che scala=lim/250. Per poter inserire dati nelle celle dobbiamo uscire dalla zona grigia del disegno e dunque la prima cella libera in alto a sinistra è SG501. Stabiliamo che le celle nelle quali inserire dati saranno di colore blu. Tutte le altre conterranno calcoli e non andranno toccate. Mettiamo la scala in SI502 e lim in SI503. Le corrispondenti grandezze incrociate sono sulla colonna SL con SL502=SI502*250SL503=SI503/250Nelle macro verrà utilizzata la convenzione più adatta.

Ingrandimenti e restringimenti

Se si aumenta il fattore di scala aumenta il valore di lim e quindi quadrato rappresenta una sezione di piano più ampia. Ne deriva che la figura verrà rimpicciolita. Abbiamo ad esempio che se la scala raddoppia allora la figura viene rimpicciolita della metà. Se la si vuole ingrandire di due volte occorre dimezzare la scala.

GLI ASSI COORDINATI

Page 12: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Nei disegni delle figure abbiamo due tipi di sistemi di riferimento, quello matriciale dove le coordinate sono intere (i pixel) e quello cartesiano nel quale è definita la figura che vogliamo realizzare. Le colonne di una matrice vengono contate dall’ alto verso il basso. Teniamo buona questa convenzione anche per la rappresentazione cartesiana e dunque l’ asse delle ordinate avrà sarà invertito andando dall’ alto in basso. Quindi ad esempio una retta a coefficiente angolare positivo apparirà discendente.

Questa figura riassume le relazioni tra le varie coordinate (è comodo copiarla sul foglio di lavoro nella zona grigia). Con i e j sono rappresentate le coordinate matriciali di riga e colonna. Le coordinate i’ e j’ (che nelle macro saranno indicati con ii e jj) sono le coordinate relative al piano cartesiano definito dalla macro CARTESIANO. Le variabili x e y sono date dai valori di j’ e i’ moltiplicate per la scala. Nel passaggio inverso invece dobbiamo prendere la parte intera dal momento che la coordinata di un pixel deve essere intero. Il foglio di lavoro potrebbe essere così organizzato

LA COLORAZIONE DELLO SFONDO

Se vogliamo colorare lo sfondo del disegno occorre inserire nella macro il codice relativo al colore desiderato.

Page 13: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Inseriamo il codice colore in SQ504

Sub COLORASFONDO()a = Range("A1:SI500").ValueRange("SQ504").Selectcolore = ActiveCellFor i = 1 To 500For j = 1 To 500If a(i, j) = 0 Thena(i, j) = coloreEnd IfNext jNext iRange("A1:SI500").Value = aEnd Sub

La macro è simile a quella di cancellazione. L’ unica differenza sta nella If-Then che si accerta del fatto che il pixel da colorare abbia valore zero. Se così non fosse lo sfondo sarebbe colorarato uniformemente cancellando il disegno.

Quando una macro richiede l’ inserimento di parametri come in questo caso cercheremo di mettere il pulsante nelle vicinanze di questo.

RAPPRESENTAZIONE DI UNA RETTA

Vediamo ora come rappresentare la retta y=mx+q in un certo colore. Occorre decidere quale parametro di scala utilizzare. Per la rappresentazione di una retta ha più senso impostare il parametrilim in maniera che grazie al reticolo si possa valutare la posizione della retta sul piano cartesiano.

Codice

Sub DISEGNARETTA()a = Range("A1:SI500").ValueRange("SL503").Selectscala = ActiveCellRange("SI507").Selectm = ActiveCellRange("SI508").Selectq = ActiveCellRange("SI509").Selectcolore = ActiveCell

For j = 1 To 500jj = j - 250

Page 14: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

x = jj * scalay = m * x + qii = Int(y / scala)i = ii + 250If i >= 1 And i <= 500 Thena(i, j) = coloreEnd IfNext j

Range("A1:SI500").Value = aEnd Sub Si tratta di una mera applicazione delle trasformazioni tra coordinate ed equazione della retta. La if-then si accerta del fatto che la coordinata i della retta sia accettabile ovvero che cada all’ interno del quadrato di rappresentazione.

La retta non è ben definita, appare tutta composta da puntini. Il metodo che viene qui proposto si applica meglio nel disegno di figure piene piuttosto che di linee.

DISEGNO DI UN RETTANGOLO

Nella rappresentazione di forme non considereremo più gli assi coordinati xy. In pratica ragioneremo solo sui pixel. Per quel che riguarda il rettangolo usiamo usiamo i parametri utilizzati nel linguaggio java. Le coordinate (ialto,jalto) indicano dove si trova il vertice in alto a sinistra del rettangolo. Avremo poi i due parametri larghezza (dimensione orizzontale) ed altezza (dimensione verticale). Inoltre verrà specificato il colore della figura. Utilizzando la colonna SP poniamo

SP509= ialtoSP510= jaltoSP511= larghezzaSP512= altezzaSP513=colore

Page 15: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Codice

Sub RETTANGOLO()a = Range("A1:SI500").Value

Range("SP509").Selectialto = ActiveCellRange("SP510").Selectjalto = ActiveCellRange("SP511").Selectlarghezza = ActiveCellRange("SP512").Selectaltezza = ActiveCellRange("SP513").Selectcolore = ActiveCell

limitei = ialto + altezzalimitej = jalto + larghezza'un pixel appartiene al rettangolo se la sua i è compresa tra i alto e limitei e la sua j tra jalto e limitej' inoltre coccorre controllare che le coordinate del pixel siano comprese tra 1 e 500For i = 1 To 500For j = 1 To 500If i >= ialto And i <= limitei And j >= jalto And j <= limitej And i >= 1 And i <= 500 And j >= 1 And j <= 500 Thena(i, j) = coloreEnd IfNext jNext iRange("A1:SI500").Value = aEnd Sub

Page 16: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

I reticolo è stato inserito solo per confermare il corretto posizionamento e dimensionamento del rettangolo.

DISEGNO DI UN CERCHIO

Vediamo ora come disegnare un cerchio avente centro (icentro,jcerchio), con un dato raggio e di un dato colore. Un pixel (i,j) appartiene al cerchio se la sua distanza dal centro è minore o uguale al raggio. Per praticità imponiamo che il quadrato della distanza (i-icentro)^2 + (j-jcentro)^2 sia minore o uguale del raggio al quadrato. Utilizziamo per i parametri la colonna SU

SU509= icentro

SU510= jcentro

SU511= raggio

SU512= colore

Codice

Sub CERCHIO()

a = Range("A1:SI500").Value

Range("SU509").Select

icentro = ActiveCell

Range("SU510").Select

jcentro = ActiveCell

Page 17: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Range("SU511").Select

raggio = ActiveCell

Range("SU512").Select

colore = ActiveCell

For i = 1 To 500

For j = 1 To 500

If (i - icentro) ^ 2 + (j - jcentro) ^ 2 <= raggio ^ 2 And i >= 1 And i <= 500 And j >= 1 And j <= 500Then

a(i, j) = colore

End If

Next j

Next i

Range("A1:SI500").Value = a

End Sub

Come si vede viene disegnato un cerchio giallo secondo i parametri specificati. Come pulsante si è stata richiamata la forma che richiama la figura disengata.

SPOSTAMENTO DI UNA FIGURA

Page 18: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Supponiamo di avere una figura e di volere cambiare la sua posizione nella zona di disegno. In pratica ciò corrisponde a spostare l’ origine degli assi coordinati da (250,250) in un altro punto del piano di disegno.

Per esempio in questo caso per spostare la figura in alto ed a sinistra dobbiamo porre l’ origine in (150, 100). Se consideriamo il riferimento matriciale con origine in alto a sinistra abbiamo questa situazione

Se chiamiamo anuova la matrice rossa abbiamo che :

ianuova=ia+100 e januova=ja+150

In pratica quindi occorre ricopiare nella matrice anuova i valori della matrice a con gli indici modificati. Se gli indici ianuova e januova sono minori di 1 o maggiori di 500 si pone ianuova=0 o ijnuova=0.

In generale

Page 19: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Supponiamo di volere muovere una figura sul piano di disegno. Siano si e sj gli spostamenti voluti dove se si è positivo la figura trasla in basso, se sj è positivo la figura trasla a destra e viceversa. Si definisce una matrice a nuova e la si percorre per i che va da 1 a 500 e j che va da 1 a 500 ponendo anuova(i,j)=a(i-si,j-sj) sempreché i due indici della matrice a siano ammissibili. Utilizziamo per i parametri di traslazione la colonna SZ con SZ503 uguale a si e SZ504=sj

Codice

Sub TRASLA()a = Range("A1:SI500").ValueDim anuova(500, 500)Range("SZ503").Selectsi = ActiveCellRange("SZ504").Selectsj = ActiveCellFor i = 1 To 500For j = 1 To 500inuovo = i - sijnuovo = j - sjIf inuovo >= 1 And inuovo <= 500 And jnuovo >= 1 And jnuovo <= 500 Thenanuova(i, j) = a(inuovo, jnuovo)End IfNext jNext iRange("A1:SI500").Value = anuovaEnd Sub

Qui abbiamo una novità rispetto alle macro precedenti ovvero abbiamo bisogno di una matrice interna anuova. Le matrici interne vanno dimensionate prima di essere utilizzate. In questo caso ciò è fatto con l’ istruzione evidenziata in rosso che definisce una matrice 500 per 500. All’ atto di ricopiare la matrice nel foglio, penultima istruzione, va riportata ovviamente la anuova.Con si=100 e sj=100 si ottiene la figura di sotto. Il cerchio giallo trasla di 45°.

Page 20: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Notaper realizzare le due figure affiancate è necessario un particolare procedimento dal momento che se si applicasse la macro TRASLA al disegno con il reticolo verrebbe traslato anche il reticolo. Si è proceduto allora in questa maniera:

CANCELLACERCHIORETICOLOscreenshot per fare la prima immagineCANCELLACERCHIOTRASLARETICOLOscreenshot per fare la prima immagine

INGRANDIMENTI

Con questa macro ingrandiremo a figura piena una porzione quadrata del disegno originale. Per specificare la parte da ingrandire si considerano le coordinate dell’ angolo in a alto a sinistra e la lunghezza del lato. Per la scelta della parte da ingrandire ci si può avvalere del reticolo ma occorre poi cancellarlo prima dell’ ingrandimento (ovvero cancellare tutto e poi rifare la figura senza reticolo). La matrice à della macro viene percorsa da ialto a ialto+l e da jalto a jalto+l a passi lunghi l/500. Le nuove coordinate ottenute, ii e jj, saranno approssimate a valori interi. Nella matrice ingrandita agrande(i,j) verrè messo il colore del pixel in a(ii,jj).Utilizziamo la colonna SZSZ509= ialtoSZ510= isinistraSZ511= lato

Codice

Page 21: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Sub INGRANDISCI()a = Range("A1:SI500").ValueDim anuova(500, 500)Range("SZ509").Selectialto = ActiveCellRange("SZ510").Selectjsinistra = ActiveCellRange("SZ511").Selectlato = ActiveCellpasso = lato / 500For i = 1 To 500For j = 1 To 500ii = Int(ialto + i * passo)jj = Int(jsinistra + j * passo)

anuova(i, j) = a(ii, jj)Next jNext iRange("A1:SI500").Value = anuovaEnd Sub

Come si vede la risoluzione dell’ oggetto ingrandito è pessima.

FRATTALI

Un frattale è una figura caratterizzata da autosimilarità. In una sua singola parte se ingrandita si ritrovano le stesse caratteristiche della figura originale.

Il triangolo di Sierpinski

Si tratta di uno dei frattali più facile da comprendere. Dato un triangolo equilatero si considerano i punti medi dei 3 lati e si uniscono. Si ottengono 4 triangoli equilateri. Il triangolo equilatero centrale

Page 22: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

viene colorato mentre a quelli intorno viene applicato lo stesso procedimento. La cosa procede all’ infinito.

La figura parrebbe difficile da rappresentare se non fosse per una sua sorprendente proprietà. Si numerino i 3 vertici V1,V2,V3 e si consideri un punto P interno al triangolo. Si consideri un numerocasuale compreso tra 1 e 3. Se il numero è uguale a 1 si vada nel punto medio tra P e V1, se uguale a 2 nel punto medio tra P e V2 e se uguale a 3 nel punto medio tra P e V2. Si colori tale punto che ora diviene esso il punto P ed il procedimento si ripete con un nuovo numero causale. Più iterazioni vengono fatto tanto più viene a definirsi il triangolo di Sierpinski.

Vediamo come impostare la cosa. In primo lugo dobbiamo trovare i 3 vertici del triangolo equilatero. Lasciamo per la base 50 pixel di margine con i bordi.

La base risulta essere di 400 pixel. L’ altezza del triangolo si ottiene moltiplicano la base per la radice di 3 diviso 2 e risulta . Prendendo la parte intera si ottengono 346 pixel pixel e quindi l’ ordinata del terzo vertice vale 450-346=104. Abbiamo quindi le coordinate dei 3 vertici

V1(50,450) V2(450,450) V3(250,104).

Quale punto iniziale prendiamo (250,120) che è certamente interno al triangolo. Per quel che riguarda la generazione del numero casuale tra 1 e 3 abbiamo a disposizione la funzione RAND() che genera un numero casuale tra 0 e 1. Dunque per avere il valore tra 1 e 3 basta utilizzare la formula INT(3*RAND())+1. L’ unica cosa che va impostata è il numero di iterazioni. Tanto più alto sarà tanto maggiore sarà la definizione del disegno ma anche il tempo di esecuzione. Mettiamo tale valore in SJ514.

Sub SIERPINSKI()a = Range("A1:SF500").Value

Page 23: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

vi1 = 50vj1 = 450vi2 = 450vj2 = 450vi3 = 250vj3 = 104'coordinate inizialii = 250j = 120For n = 1 To 50000x = Int(3 * Rnd()) + 1If x = 1 Theni = Int((i + vi1) / 2)j = Int((j + vj1) / 2)End If

If x = 2 Theni = Int((i + vi2) / 2)j = Int((j + vj2) / 2)End If

If x = 3 Theni = Int((i + vi3) / 2)j = Int((j + vj3) / 2)End Ifa(j, i) = 2 ' scambio gli indici riga e colonna per trasporreNext nRange("A1:SF500").Value = aEnd Sub

In questo caso sono state effettuate 50000 iterazioni. Nell’ assegnazione è stato effettuato uno scambio di indici (a(j,i)=2) ovvero quel che si dice una trasposizione della matrice. La ragione di ciò risiede nel fatto che se si fosse lasciata l’ assegnazione normale ( a(i,j)=2) il triangolo sarebbe stato rappresentato con la base parallela al bordo di destra.

Page 24: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

La macro può essere modificata aggiungendo l’ opzione colore che permette di disegnare il triangolo secondo un colore preimpostato in una cella.

IL FRATTALE DI MANDELBROT

Si tratta del più famoso di tutti i frattali. Si consideri un punto P(x0,y0) su piano cartesiano e si definisca la successione seguente

per n=0 x(0)=x0 y(0)=y0se n>0 x(n+1)=x(n-1)^2 – y(n-1)^2+x0 y(n+1)=2*x(n-1)*y(n-1)+y0

Si genera una successione di punti sul piano cartesiano

Page 25: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Abbiamo trepossibili casi1) la successione converge ovvero all’ aumentare di n si avvicina sempre di più ad un dato punto (tipicamente con un andamento a spirale)2) la successione diverge ovvero la distanza dall’ origine dei punti tende a diventare infinita3) la successione oscilla ovvero continua a ciclare su due i più valori.

L’ insieme di Mandelbrot è dato dai punti P(x0,y0) per i quali la successione converge. Si dimostra che la successione diverge sicuramente se esce dalla circonferenza centrata dall’ origine di raggio due ovvero se per un certo n si verifica che x(n)^2+y(n)^ 2> 4.Per disegnare l’ insieme di Mandelbrot facciamo l’ ipotesi che se la condizione non si verifica entro20 iterazioni significa che il punto appartiene all’ insieme di Mandelbrot e dunque coloriamo il pixel ad esso associato. Impostiamo l’intervallo a 1,90 (cella SH503) sebbene l’ insieme sia certamente tutto nella circonferenza di raggio 2. Il margine serve per vedere bene la “coda “ del frattale e per fare degli abbellimenti.CodiceSub MANDELBROT()a = Range("A1:SF500").ValueRange("SL503").Selectscala = ActiveCellFor i = 1 To 500For j = 1 To 500ii = i - 250jj = j - 250x0 = jj * scala

Page 26: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

y0 = ii * scalaIf x0 ^ 2 + y0 ^ 2 <= 4 Then 'se il punto P(x0,y0) sta fuori dalla ciconferenza è inutile verificarexprec = x0yprec = y0'con xprec indichiamo x(n-1) e con yprec y(n-1)converge = 1 'se è uguale a 1 significa che il punto è nell' insieme. Se è ugula a zero non è nell' insiemeFor n = 1 To 20If converge = 1 Then ' il controllo lo devo fare solo se converge=1 cioè solo se non ho già trovato che divergex = xprec ^ 2 - yprec ^ 2 + x0y = 2 * xprec * yprec + y0If x ^ 2 + y ^ 2 > 4 Thenconverge = 0 ' la sucessione è uscita dalla circonferenza e dunque si è verificata la condizione di divergenzaEnd If'aggiorno i valori per l' iterazione successivaxprec = xyprec = yEnd IfNext nIf converge = 1 Then 'il pixel viene posto uguale a 1, cioè colorato rosso, solo se vi è convergenzaa(i, j) = 2End IfEnd IfNext jNext iRange("A1:SF500").Value = aEnd Sub

Page 27: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

L’ insieme appare nei suoi “filamenti” discontinuo anche se in realtà non è così. Al solito si tratta di imprecisioni dovute alle approssimazioni di calcolo.

ABBELLIMENTI

L’ insieme di Mandelbrot può essere rappresentato in maniera più suggestiva colorandone i bordi esterni a seconda della “velocità di divergenza” ovvero del numero di iterazioni necessarie affinché la successione esca dalla circoferenza. Modifichiamo il codice tramite l’ introduzione di una variabile che chiamiamo nuscita. La viarabile sarà azzerata prima del ciclo n e posta uguale ad n qualora di verifichi la condizione di divergenza. Il il valore di nuscita è certamente minore od uguale a venti. Qualora si verifichi la condizione di divergenza il pixel sarà colorato diversamente a seconda di tale valore. Facciamo quindi una copia della Macro MANDELBROT , la chiamiamo MANDELBRTOCOLORI e la modifichiamo.

Sub MANDELBROTCOLORI()a = Range("A1:SF500").ValueRange("SL503").Selectscala = ActiveCellFor i = 1 To 500For j = 1 To 500nuscita = 0 ‘variabile che dice a che iterazione avviene l’ uscita dalla circonferenzaii = i - 250jj = j - 250x0 = jj * scalay0 = ii * scalaIf x0 ^ 2 + y0 ^ 2 <= 4 Then xprec = x0yprec = y0converge = 1For n = 1 To 20If converge = 1 Then x = xprec ^ 2 - yprec ^ 2 + x0y = 2 * xprec * yprec + y0If x ^ 2 + y ^ 2 > 4 Thenconverge = 0 If nuscita = 0 Then ‘la variabile n uscita è inizialmente posta a zero. Qundo viene modificatanuscita = n ‘ovvero aggiornata ad un valore diverso da zero, non deve più essere toccata End IfEnd Ifxprec = xyprec = yEnd IfNext nIf converge = 1 Then 'a(i, j) = 2End If

If converge = 0 Then‘condizioni di colorazione a seconda dell’ intervallo di valori di n If nuscita > 16 And nuscita <= 19 Thena(i, j) = 1 ‘neroEnd If

Page 28: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

If nuscita > 13 And nuscita <= 16 Thena(i, j) = 3 ’ verdeEnd IfIf nuscita > 10 And nuscita <= 13 Thena(i, j) = 5 ‘gialloEnd If

End IfEnd IfNext jNext iRange("A1:SF500").Value = aEnd Sub

Nel codice le modifiche apportate sono in rosso. Può essere modificato nei colori e negli intervalli di valori di colorazione. Con questi parametri abbiamo questo risultato

INGRANDIMENTO DI UNA PORZIONE DELL’ INSIEME DI MANDELBROT

Page 29: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Per praticità poniamo uguale a 2 l’ intervallo in maniera che ogni quadrato del reticolo abbia lato 0,4. Proviamo ad ingrandire la parte evidenziata in blu. Ogni singolo pixel corrisponde a 0,4/500=0,0008CodiceSub MANDELBROTINGRANDITO()a = Range("A1:SF500").Valuescala = 0.0008 ‘scala precalcolata. Non la importiamo dal foglio di calcoloFor i = 1 To 500For j = 1 To 500ii = i - 250jj = j - 250x0 = jj * scala – 0.4 ‘l’ origine del sistem di riferimento del quadratino ha origne in (-0,4,-0,8)y0 = ii * scala - 0.8If x0 ^ 2 + y0 ^ 2 <= 4 Thenxprec = x0yprec = y0converge = 1For n = 1 To 20If converge = 1 Thenx = xprec ^ 2 - yprec ^ 2 + x0y = 2 * xprec * yprec + y0If x ^ 2 + y ^ 2 > 4 Thenconverge = 0End Ifxprec = xyprec = yEnd If

Page 30: GRAFICI CON EXCEL - verticallimit.altervista.orgverticallimit.altervista.org/GRAFICI_EXCEL.pdf · GRAFICI CON EXCEL In quest’ articolo vedremo un uso particolare del foglio di lavoro

Next nIf converge = 1 Thena(i, j) = 2End IfEnd IfNext jNext iRange("A1:SF500").Value = aEnd Sub

L’ ingrandimento mostra una struttura simile a quella iniziale quanto a finalmenti mentre invece si apprezza poco la riproposizione della forma del frattale iniziale.


Recommended