Sei sulla pagina 1di 98

Excel &

Visual Basic for Application


(VBA)
Macro di Excel & VBA
MACRO
=
azione o gruppo di azioni che possibile utilizzare
per automatizzare le attivit
(manuale in linea Microsoft)
Le macro sono delle procedure integrate negli
Applicativi Microsoft Office
VBA consente di modificare macro esistenti o
di registrarne delle nuove
Microsoft VBA
uno strumento che permette di controllare
Microsoft Excel e di estenderne le potenzialit
una versione di Visual Basic inclusa in
unapplicazione: con esso condivide lEditor e
buona parte degli strumenti di supporto
una macro VBA sviluppata in ambiente Excel non
pu essere eseguita al di fuori dellapplicazione
ospite
Visual Basic
Linguaggio di programmazione
ad alto livello
interpretato
tradotto mediante interprete
visuale
interazione con lutente attraverso finestre di
dialogo, pulsanti,...
Registrazione di macro in Excel
Lidea alla base al meccanismo di definizione
di macro in Excel la registrazione della
azioni eseguite in un prestabilito intervallo
di tempo
A partire dallinizio della registrazione di una macro,
il sistema registra tutte le azioni compiute dallutente
fino allinterruzione della registrazione
la sequenza di azioni registrata costituisce la macro
Registrazione di macro in Excel
aprire una cartella di lavoro Excel
inserire dei valori numerici nelle celle A1:B2
nel foglio di lavoro selezionare le celle A1:B2 ed
impostare il formato valuta
supponiamo di voler definire una funzione che imposta
il formato valuta con un numero di decimali diversi:
registriamo una macro
visualizzare la barra degli strumenti Visual Basic
il pulsante sul foglio di lavoro determina linizio
della registrazione di una macro
il pulsante stato sostituito da , che determina
la fine della registrazione della macro
Registrazione di macro in Excel
premere il pulsante regista macro
definire le impostazioni desiderate ed interrompere
la registrazione
selezionare un gruppo di celle contenenti importi ed
eseguire la macro attraverso lapposito pulsante
visualizzare la macro scegliendo lopzione modifica
dal men attivato dal pulsante esegui macro
Automazione
Excel
Libreria
di oggetti
VBA
Excel dialoga con VBA attraverso la sua
libreria ad oggetti
Astrazione dei dati
Alcuni linguaggi di programmazione permettono di
definire strutture dati complesse a partire dai tipi semplici
si derivano tipi di dati complessi che comprendono nuove
strutture dati e le operazioni consentite su di esse
CLASSI
gli elementi di una classe sono detti OGGETTI
ciascun oggetto di una classe una istanza della classe
Esempio:
CLASSE RAZIONALE
s
o
m
m
a
d
i
f
f
.
.
.
.
.
.
.
.
m
a
g
g
.
num.
den.
m
i
n
o
r
e
.
.
.
.
.
.
.
STATO
(variabili)
METODI
(funzioni)
i metodi cambiano lo stato
8/3 = istanza
di razionale
Propriet delle classi
i membri di una classe sono privati non
sono accessibili, non possono essere
modificati
STATO + METODI = MEMBRI DELLA CLASSE
PROGRAMMAZIONE PROCEDURALE
i programmi sono sviluppati intorno alle procedure
i linguaggi orientati agli oggetti nascondono i dati e
la complessit delle operazioni (si inviano messaggi
agli oggetti)
PROGRAMMAZIONE AD OGGETTI
i programmi sono sviluppati intorno ai dati
i linguaggi procedurali nascondono la complessit
delle operazioni sui dati (sono visibili funzioni invocate
sui dati)
Modelli di programmazione
Sintassi
NOMEOGGETTO.NOMEVARIABILE
riferimento ad una propriet delloggetto
(specificata dalla variabile)
NOMEOGGETTO.NOMEMETODO
riferimento ad una azione che pu essere
eseguita sulloggetto (specificata dal metodo)
ES: Selection.Style = " Currency"
ES: Selection.Copy
Procedure in VBA
Sub FormatoValuta()
'
' FormatoValuta Macro
' Macro registrata il 31/10/2005 da Stefania
'
Selection.NumberFormat = " #.##0.0000"
......
End Sub
testata
commenti: la
linea inizia con
un apostrofo
fine della
procedura
procedure di tipo Sub
Esempio
in Excel possibile unire celle adiacenti sulla stessa riga,
ma non esiste una funzione built-in per lunione di celle
adiacenti di una stessa colonna: registriamo una macro
inserire un testo nella cella A6, selezionare le celle
A6:A12 ed eseguire la macro
nel men Formato -> Celle -> Allineamento selezionare
lopzione Unione celle con orientamento verticale
attivare la registrazione di una macro
interrompere la registrazione
visualizzare la macro
macro UnioneVerticale
Sub UnioneVerticale()
'
' UnioneVerticale Macro
' Macro registrata il 31/10/2005 da Stefania
'
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
End Sub
la struttura
With nomeoggetto
...
End With
delimita un blocco
di operazioni
sulloggetto
Esercizio
modificare listruzione
.VerticalAlignment = xlBottom
in
.VerticalAlignment = xlCenter
ed applicare la macro allintervallo di celle A15:A20
Aggiunta di una cartella di lavoro
chiudere eventuali cartelle di lavoro aperte
aprire leditor del Visual Basic
selezionare lopzione Finestra Immediata dal men
Visualizza; un doppio clic sulla sua barra del titolo la
libera dalla finestra delleditor VBA cui ancorata
con la Finestra Immediata attiva selezionare lopzione
Completa parola dal men Modifica
Aggiunta di una cartella di lavoro
nella Finestra Immediata digitare listruzione
Workbooks.Add
OGGETTO
METODO
digitare listruzione ?Workbooks.Count
il punto interrogativo anteposto ad una propriet di
un oggetto comporta la visualizzazione del valore
corrente di tale propriet
OGGETTO
PROPRIETA
digitare Workbooks.Close
Riferimento ad una singola cartella di lavoro
creare tre nuove cartelle di lavoro
digitare ?Workbooks.Item(1).Name
individua un membro della classe
specifica
una propriet
Workbooks.Item(1) Workbooks(1)
digitare Workbooks(1).Close
Riferimento attraverso il nome
digitare Workbooks( NOME ).Activate, inserendo al
posto di NOME il nome di una delle cartelle di lavoro
aperte
quando si fa riferimento ad una istanza attraverso
il nome, esso va posto tra virgolette
digitare ActiveWorkbook.Close
cartella di lavoro attiva
Aggiunta di un foglio di lavoro
lasciare ununica cartella di lavoro aperta
aprire leditor del Visual Basic
nella Finestra Immediata digitare Worksheets.Add
nella Finestra Immediata digitare ?Worksheets(1).Name
?Worksheets.Item(1).Name
Definizione delle propriet
digitare Worksheets(1).Name = foglio aggiunto
digitare Worksheets( Foglio2 ).Activate
digitare Activesheet.Delete
digitare ?Activesheet.Delete
propriet
metodo
digitare Worksheets.Add.Name = " foglio nuovo"
digitare Worksheets.Add.Delete
Worksheets.Add il riferimento alloggetto foglio nuovo
Oggetti RANGE
identificano un intervallo di celle
nelleditor del VBA selezionare lopzione Visualizzazione
Oggetti (pulsante Visualizzatore Oggetti)
colonna a sinistra: classi di oggetti
colonna a destra: membri (propriet e metodi) della
classe selezionata
Range compare nellelenco delle classi
Propriet RANGE
Range(arg)
resituisce un oggetto Range
che individua lintervallo arg
Range compare anche nellelenco dei membri della classe
globali come propriet (Property)
Procedure in VBA
Property Nome(lista dei parametri)
'
istruzioni
......
End Poperty
procedure di tipo Property
le procedure di tipo Property consentono di
impostare il valore di una propriet
ottenere il valore di una propriet
impostare un riferimento ad un oggetto
nella Finestra Immediata digitare Range(" B2" ).Select
digitare Range(" B2:H2" ).Select
digitare Range(" H14" ).Select e, successivamente,
Range(Selection," B2" ).Select
Selection un membro della classe globali; resituisce
un oggetto che identifica la selezione corrente
digitare Range(" H14" ).Select e, successivamente,
?Selection.Value
Propriet RANGE
Propriet CELLS
Cells
restituisce un oggetto Range
che individua le celle
dell'intervallo specificato
Cells compare nellelenco dei membri della classe
globali come propriet
Propriet CELLS
nella Finestra Immediata digitare Cells.Select
digitare Cells.Item(3).Select Cells(3).Select
riferimento alloggetto che individua
la terza cella del foglio di lavoro
digitare Cells(3,2).Select
digitare ?Cells.Count
Propriet ROWS e COLUMN
COLUMNS(arg)
restituisce un oggetto Range che individua
le colonne nell'intervallo specificato da arg
ROWS(arg)
restituisce un oggetto Range che individua
le righe nell'intervallo specificato da arg
Propriet ROWS e COLUMNS
nella Finestra Immediata digitare Columns(2).Select
digitare Columns( D ).Select
digitare Columns( B:H ).Select
digitare Rows(2).Select Rows( 2 ).Select
digitare Rows( 3:14 ).Select
Dichiarazione di variabili
Dim Nome(dimensione) As Tipo
tipi di dati:
1. Byte
2. Boolean
3. Integer
4. Long
5. Currency
6. Single
7. Double
8. Date
9. String
10. Object
11. Variant
12. Decimal
Tipo Byte
comprende i numeri interi positivi
appartenenti all'intervallo [0,255]
Sub ProvaByte()
Dim prima As Byte
prima = 34
Range(" a1" ).Select
ActiveCell.Value = prima
End Sub
Esempio:
Tipo Boolean
comprende due valori, True (-1) e False (0)
Sub ProvaBoolean()
Dim prima As Boolean
prima = False
If (prima) Then
Range(" a1" ).Select
ActiveCell.Value = " La variabile prima vera"
End If
If (Not prima) Then
Range(" a2" ).Select
ActiveCell.Value = " La variabile prima falsa"
End If
End Sub
Esempio:
Operatori logici e di confronto
logici
And (congiunzione)
Or (disgiunzione)
Not (negazione)
di confronto
< (minore)
> (maggiore)
<= (minore o uguale)
>= (maggiore o uguale)
= (uguale)
<> (diverso)
Tipo Integer
comprende i numeri interi appartenenti
allintervallo [-32.768,32.767]
Sub ProvaInteger()
Dim primo, secondo As Integer
primo = 32
secondo = 44
Range(" a1:a3" ).Select
Selection.Value = primo * secondo
End Sub
Esempio:
Tipo Long
comprende i numeri interi appartenenti
allintervallo [-2.147.483.648,2.147.483.647]
Sub ProvaLong()
Dim lunga(3) As Long
lunga(0) = 2 ^ 10
lunga(1) = 2 ^ 11
lunga(2) = 2 ^ 12
Range(" a10" ).Select
ActiveCell.Value = lunga(0)
Range(" b10" ).Select
ActiveCell.Value = lunga(1)
Range(" c10" ).Select
ActiveCell.Value = lunga(2)
End Sub
Esempio:
Tipo Currency
comprende i numeri rappresentabili appartenenti
allintervallo
[-922.337.203.685.477,5808, 922.337.203.685.477,5807]
utilizzato per calcoli monetari oppure nei casi
in cui la precisione fondamentale
Tipo Single
comprende i numeri macchina in singola
precisione appartenenti agli intervalli
0
-3,402823E+38 3,402823E+38
-1,401298E-45 1,401298E-45
Tipo Double
comprende i numeri macchina in doppia
precisione appartenenti agli intervalli
0
-1.79769313486231E+308 1,797693134862325E+308
-4,94065645841247E-324 4,94065645841247E-324
Esempio
Sub ProvaDouble()
Dim grosso As Double
grosso = 32 ^ 12
Range(" a1" ).Select
ActiveCell.Value = grosso
End Sub
Operatori su dati numerici
operazioni aritmetiche elementari: +, -, *, /
elevazione a potenza: ^
divisione intera: \
resto della divisione intera: Mod
Dim x As Double
x = 44*13.5-18+1000
Dim x As Double
x = 2^10
Dim x, y, z, t As Integer
x = 5
y = 3
z = 5\3
t = x Mod y
z=1
t=2
Tipo Date
comprende numeri reali utilizzati per
memorizzare date ed orari. Il valore a
sinistra del separatore decimale rappresenta
una data, quello a destra un orario
Sub ProvaDate()
Dim data As Date
data = 37956.4407283565
Range(" a1" ).Select
ActiveCell.Value = data
End Sub
Esempio:
Tipo String
comprende i caratteri alfanumerici. Pu
contenere stringhe di lunghezza fissa con
lunghezza compresa tra 0 e circa 63 KB di
caratteri.
Sub ProvaString()
Dim stringa As String
stringa = " Il mio nome Stefania"
Range(" a1" ).Select
ActiveCell.Value = stringa
End Sub
Esempio:
Operatori su stringhe
operatore di concatenazione: &
Dim a, b, c As String
a = " mare"
b = " moto"
c = a & b
c = maremoto
Tipo Object
rappresenta qualsiasi riferimento ad un oggetto
Sub ProvaObject()
Dim cella As Object
Set cella = Range(" a1" )
Range(" a10" ).Select
ActiveCell.Value = cella
End Sub
assegnazione di
riferimento ad
un oggetto
Esempio:
valore
Tipo Variant
quando si omette la dichiarazione di una variabile,
essa viene implicitamente dichiarata di tipo Variant
Luso di dati variant sconsigliabile poich inficia
lefficienza dei programmi sviluppati
Finestre di dialogo
Funzione InputBox
visualizza un messaggio in una finestra di dialogo
attende limmissione di un testo dallutente
restituisce una variabile di tipo string che contiene il
testo immesso
Funzione MsgBox
visualizza un messaggio in una finestra di dialogo
attende che lutente selezioni un pulsante
Finestre di dialogo
Metodo InputBox
visualizza un messaggio in una finestra di dialogo
attende limmissione di una variabile di tipo
specificato dallutente
restituisce una variabile del tipo specificato
Funzione InputBox
Specifiche
Function InputBox(Prompt, title, default, xpos, ypos,
helpfile, context) As String
Parametri
Prompt: obbligatorio. Stringa che rappresenta il messaggio
visualizzato nella finestra di dialogo
title: facoltativo. Stringa visualizzata nella barra del titolo della
finestra di dialogo
default: facoltativo. Stringa visualizzata nella casella di testo come
risposta predefinita quando non fornito input
xpos, ypos: facoltativi. Numeri che specificano la posizione della
finestra di dialogo
helpfile: facoltativo. Stringa che identifica il file della Guida per
ottenere informazioni sensibili al contesto per la finestra di dialogo
context: facoltativo. Numero che indica il numero di contesto della
Guida assegnato. Diventa necessario se si definisce helpfile
Funzione MsgBox
Specifiche
Function MsgBox(Prompt, buttons, title, helpfile, context)
Parametri
Prompt: obbligatorio. Stringa che rappresenta il messaggio
visualizzato nella finestra di dialogo
buttons: facoltativo. Indica la somma dei valori che specificano il
numero ed il tipo di pulsante da visualizzare
title: facoltativo. Stringa visualizzata nella barra del titolo della
finestra di dialogo
helpfile: facoltativo. Stringa che identifica il file della Guida per
ottenere informazioni sensibili al contesto per la finestra di dialogo
context: facoltativo. Numero che indica il numero di contesto della
Guida assegnato. Diventa necessario se si definisce helpfile
Alcuni valori del parametro buttons
vbOKOnly: visualizza solo il pulsante OK
vbOKCancel: visualizza i pulsanti OK e Annulla
vbAbortRetryIgnore: visualizza i pulsanti Termina,
Riprova ed Ignora
vbYesNoCancel: visualizza i pulsanti Si, No ed Annulla
vbYesNo: visualizza i pulsanti Si e No
Esempi
Sub ProvaInputBox()
Dim nome As String
nome = InputBox(" Come ti chiami?" )
MsgBox (" Ciao " & nome)
End Sub
Sub ProvaMsgBox()
Dim mystring, msg, title As String
msg = " Continuare ?"
title = " Dimostrazione MsgBox"
risposta = MsgBox(msg, vbYesNo, title)
If risposta = vbYes Then
mystring = " S"
Else
mystring = " No"
End If
Range(" A1" ).Select
Selection.Value = mystring
End Sub
NOTA:
QUANDO
DEFINITO
ALMENO
UN PARAMETRO
FACOLTATIVO
BISOGNA
ASSEGNARE
LOUPUT DELLA
FUNZION
MSGBOX
AD UNA
VARIABILE
Metodo InputBox
il metodo InputBox un metodo delloggetto Application
loggetto Application rappresenta l'intera applicazione
Microsoft Excel
Sintassi:
var =Application.InputBox(Prompt, Title, Default, Left, Top,
HelpFile, HelpContextID, Type)
Metodo InputBox
Specifiche
Function InputBox(Prompt, Title, Default, Left, Top,
HelpFile, HelpContextID, Type)
Parametri
Prompt: obbligatorio. Stringa che rappresenta il messaggio
visualizzato nella finestra di dialogo
Title: facoltativo. Stringa visualizzata nella barra del titolo della
finestra di dialogo
Default: facoltativo. Stringa visualizzata nella casella di testo come
risposta predefinita quando non fornito input
Left,Top: facoltativi. Specificano la posizione della finestra di dialogo
HelpFile: facoltativo. Stringa che identifica il file della Guida per
ottenere informazioni sensibili al contesto per la finestra di dialogo
HelpContextID: facoltativo.
Type: facoltativo. Specifica il tipo di dati da restituire in output
Alcuni valori del parametro type
0: formula
1: numero
2: stringa
4: dato logico
un esempio
Sub ProvaMInputBox()
Dim num As Integer
Dim titolo, msg As String
num = Application.InputBox(prompt:=" inserire un numero" , Type:=1)
titolo = " output"
msg = " Il numero digitato " & num
risposta = MsgBox(msg, , titolo)
End Sub
QUANDO SI DEFINISCONO SOLO
ALCUNI PARAMETRI
OPZIONALI SI LASCIA UN
CAMPO VUOTO PER CIASCUNO
DEI PARAMETRI NON DEFINITI
Strutture di controllo
strutture di selezione
If condizione1 Then
Istruzioni 1
ElseIf condizione2 Then
Istruzioni 2
Else
Istruzioni 3
End If
PASCAL-LIKE VBA
If condizione1 Then
Istruzioni 1
Else If condizione2 Then
Istruzioni 2
Else
Istruzioni 3
End If
Esercizio
Scrivere una procedura che, a partire dalla data
corrente, restituisca
il numero di giorni che mancano al Natale se
questultimo non ancora passato nellanno solare
il numero di giorni da cui trascorso in caso contrario
suggerimento: la funzione Nowrestituisce la data corrente
Esempio:
Dim data As Date
data = Now
Soluzione
Sub ProvaIf()
Dim data As Date
data = Now
Range(" a9" ).Select
ActiveCell.NumberFormat = " dd/mm/yyyy"
ActiveCell.Value = data
If data > 39076 Then
Range(" a10" ).Select
ActiveCell.Value = " Natale passato da giorni = "
Range(" a11" ).Select
ActiveCell.Value = data - 39076
Else
Range(" a10" ).Select
ActiveCell.Value = " A Natale mancano giorni = "
Range(" a11" ).Select
ActiveCell.Value = 39076 - data
End If
Range(" A11" ).Select
ActiveCell.NumberFormat = " 000"
End Sub
Riferimenti relativi ed assoluti
scrivere la seguente procedura:
Sub ProvaRif()
Dim MyRange As Range
Set MyRange = Range(" B2" )
MyRange.Select
MyRange.Range(" A1:F1" ).Select
End Sub
riferimento relativo
Propriet OFFSET
nella Finestra Immediata digitare
Set myrange = Range(" b2" )
?myrange.Value
myrange.Select
myrange.Offset(1).Select
myrange.Offset(1,5).Select
Propriet OFFSET
OFFSET(ROWS,COLS)
restituisce un oggetto di tipo Range
che identifica un intervallo di celle
distante ROWS righe e COLS colonne
dalla selezione considerata
Procedure in VBA
procedure di tipo Function
le procedure di tipo Function restituiscono
un valore attraverso il proprio nome
Function Nome(lista dei parametri)
'
istruzioni
......
End Function
il nome della Function utilizzato come una
variabile nella procedura chiamante
Esempio
Function RigaLibera()
Dim myrange As Object
Dim ultima As Integer
Range(" A1" ).Select
Set myrange = Selection.CurrentRegion
ultima = myrange.Rows.Count
RigaLibera = ultima + 1
End Function
la procedura RigaLibera restituisce il valore della prima
riga libera nel foglio di lavoro attivo
Sub ChiamaRigaLibera()
Dim riga As Integer
riga = RigaLibera()
MsgBox (" la prima riga libera " & RigaLibera)
End Sub
la procedura ChiamaRigaLibera la richiama
Esercizio
correggere la procedura per il calcolo del numero di giorni
che mancano a Natale in modo che:
la data odierna venga visualizzata nella prima colonna
della prima riga libera del foglio di lavoro
nella cella al di sotto di questa venga visualizzata la
stringa a Natale mancano giorni oppure Natale
passato da giorni
nella cella a destra di questultima venga inserito
il numero di giorni calcolato
Sub ProvaOffset()
Dim data As Date
Dim riga As Integer
data = Now
riga = RigaLibera()
Cells(riga, 1).Select
ActiveCell.NumberFormat = " dd/mm/yyyy"
ActiveCell.Value = data
If data > 39076 Then
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = " Natale passato da giorni = "
ActiveCell.Offset(1, 1).Select
ActiveCell.Value = data - 39076
Else
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = " A Natale mancano giorni = "
ActiveCell.Offset(1, 1).Select
ActiveCell.Value = 39076 - data
End If
ActiveCell.NumberFormat = " 000"
End Sub
Strutture di controllo
strutture di iterazione
ciclo for
for i =1,Ndo
istruzioni
endfor
For i =1 ToNStepk
istruzioni
Next i
PASCAL-LIKE VBA
Esercizio
sviluppare una procedura per la somma
di N numeri reali
Soluzione
Sub ProvaSomma()
'
' ProvaSomma Macro
' Macro registrata il 16/11/2006 da Stefania
'
Dim i, N As Integer
Dim sum As Single
N = Application.InputBox(prompt:=" inserire il numero di addendi" , Type:=1)
somma = 0
For i = 1 To N
Cells(i, 1) = Application.InputBox(prompt:=" inserire addendo" , Type:=1)
somma = somma + Cells(i, 1)
Next i
Cells(N + 1, 1) = " somma"
Cells(N + 1, 2) = somma
MsgBox (" La somma vale " & somma)
'
End Sub
Strutture di controllo
strutture di iterazione
ciclo For Each
For EachelementoInInsieme
istruzioni
Next elemento
consente di ripetere un blocco di istruzioni per ogni
elemento di un insieme prestabilito
Esercizio: definite le celle A1:D4 ed inserito un elemento
nella cella F1 scrivere una procedura in VBA che
cerchi lelemento inserito in F1 nellinsieme A1:D4
restituisca in output nella cella F2
la posizione dellelemento trovato se lelemento
appartiene allinsieme
un messaggio che segnali lassenza dellelemento
cercato altrimenti
suggerimento: la Propriet Address restituisce il riferimento
ad un oggetto di tipo Range
Sub ProvaAddress()
Dim myRange As Range
Set myRange = Cells(2, 3)
Cells(2, 4).Select
ActiveCell.Value = " alla mia sinistra c' " & myRange.Address
End Sub
ESEMPIO:
Soluzione
Sub ProvaForEach()
Dim Found As Boolean
Dim OggettoMio, elemento, Collezione As Object
Found = False
Set Collezione = Range(" A1:D4" )
Set elemento = Range(" F1" )
For Each OggettoMio In Collezione
If OggettoMio.Value = elemento.Value Then
Found = True
dove = OggettoMio.Address
End If
Next OggettoMio
Range(" F2" ).Select
If Found Then
ActiveCell.Value = " Trovato in"
ActiveCell.Offset(0, 1).Value = dove
Else
ActiveCell.Value = " Non trovato"
End If
End Sub
Strutture di controllo
strutture di iterazione
costrutto while
while(condizione) do
istruzioni
endwhile
While(condizione)
istruzioni
Wend
PASCAL-LIKE VBA
Esercizio
sviluppare una procedura per il prodotto
di N numeri reali in doppia precisione
Soluzione
Sub ProvaProdotto()
'
Dim i, N As Integer
Dim prod As Double
N = Application.InputBox(prompt:=" ins. il num. di fattori" , Type:=1)
i = 1
Cells(1, 1) = Application.InputBox(prompt:=" ins. un fattore" , Type:=1)
prod = Cells(1, 1)
While (i < N) And (prod <> 0)
i = i + 1
Cells(i, 1) = Application.InputBox(prompt:=" inserire un fattore" , Type:=1)
prod = prod * Cells(i, 1)
Wend
Cells(N + 1, 1) = " prod"
Cells(N + 1, 2) = prod
MsgBox (" Il prodotto vale " & prod)
'
End Sub
Strutture di controllo
strutture di iterazione
costrutto repeat-until
Do
istruzioni
Loop until (condizione)
PASCAL-LIKE VBA
repeat
istruzioni
until (condizione)
Esercizio
sviluppare una procedura per la conversione
di un numero intero dalla base decimale
a quella binaria
Soluzione
Sub Conversione()
Dim m, n, q, r As Integer
Dim bin, stringa As String
n = Application.InputBox(" Inserire il numero in base 10" , Type:=1)
m = n
Do
q = m \ 2
r = m Mod 2
stringa = r
bin = stringa & bin
m = q
Loop Until (q = 0)
MsgBox (" la rappresentazione binaria " & bin)
End Sub
Esecuzione di una macro da pulsante
in VBA, possibile assegnare un pulsante ad una macro
nel foglio di lavoro Excel, selezionare la visualizzazione
della barra degli strumenti Moduli
(Visualizza->Barre degli Strumenti->Moduli)
il pulsante attiva linserimento di un pulsante di
comando nel foglio di lavoro cui si deve assegnare una
macro tra quelle sviluppate nel progetto corrente
Esercizio
sviluppare una procedura per la determinazione
del massimo comune divisore tra due numeri interi
Sub MCD()
Dimx, y, massimo, minimo, q, r As Integer
Dimmsg As String
x = Application.InputBox("Inserire il primo numero", Type:=1)
y = Application.InputBox("Inserire il secondo numero", Type:=1)
massimo = max(x, y)
minimo = min(x, y)
x = massimo
y = minimo
Do
q = x \ y
r = x Mod y
x = y
y = r
Loop Until (r = 0)
msg = "Il massimo comune divisore tra " & massimo & " e " & minimo & " " & x
MsgBox (msg)
End Sub
Soluzione
Function max(a, b)
If a < b Then
max = b
Else
max = a
End If
End Function
Function min(a, b)
If a < b Then
min = a
Else
min = b
End If
End Function
Seconda versione
Sub MCD2()
Dimx, y, massimo, minimo, q, r As Integer
x = Cells(1, 1)
y = Range("b1").Value
massimo = max(x, y)
minimo = min(x, y)
..
Cells(2, 1) = "il massimo comune divisore tra "
Cells(2, 2) = massimo
Cells(2, 3) = "e "
Cells(2, 4) = minimo
Cells(2, 5) = " "
Cells(2, 6) = x
With Range(A2:F2")
.HorizontalAlignment = xlCenter
End With
End Sub
Esercizio
Assegnato un array a di N numeri interi, scrivere una
procedura che generi una matrice b avente al pi N righe e
2 colonne in modo che:
la prima colonna contenga gli indici degli elementi
pari o nulli del vettore a
la seconda colonna contenga suddetti elementi
Soluzione
Esercizio
Assegnati N numeri interi, scrivere una procedura in VBA che
verifichi se esistono tre elementi a1, a2, a3 nellinsieme
di numeri considerato tali che:
i tre numeri sono letti di seguito
a3 = a2+1, a2 = a1+1 e a1 > 0
Soluzione
Esercizio
Sviluppare una procedura in VBA che, dato un array di n
numeri reali, calcoli
1. la somma dei valori assoluti degli elementi dellarray;
2. il valore assoluto della somma degli elementi dellarray.
Soluzione
Esercizio
Sviluppare una procedura in VBA che, dato un array di
mxn numeri reali, calcoli
1. la somma degli elementi di ciascuna colonna;
2. il massimo tra i valori ottenuti al punto 1.
maxsomma
Esercizio
Sviluppare una procedura in VBA che, dato un array
bidimensionale di nxn numeri interi positivi, produca un
array bidimensionale che contenga
gli elementi pari dellarray di partenza nella prima colonna
gli elementi dispari dellarray di partenza nella seconda
colonna
Esercizio
Sviluppare una procedura in VBA che, dato un array
bidimensionale di mxn numeri reali, produca
1. un array di reali contenente gli elementi non nulli
dellarray di partenza
2. un array di interi contenente gli indici di riga degli
elementi estratti dallarray di partenza di cui al punto 1
3. un array di interi contenente gli indici di colonna degli
elementi estratti dallarray di partenza di cui al punto 1.
Esercizio
Sviluppare una procedura in VBA che, dato un array di n
numeri reali, calcoli
1. la somma degli elementi di posto dispari
2. il prodotto degli elementi di posto pari
3. il valor medio di tutte le componenti
Esercizio
Sviluppare una procedura in VBA che, dato un array
bidimensionale di nxn numeri reali, calcoli
1. il numero di elementi nulli nella prima colonna
2. il numero di elementi nulli nellultima colonna
3. il massimo tra gli elementi situati sulla diagonale
principale