(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
DATABASE Dal modello concettuale ER all’applicativo finale in Access, Visual Basic, Pascal, Html e Php: All'interno esempi di applicativi realizzati con Access, Visual Studio, Lazarus e Wamp