Range("B2")
Transcript
Range("B2")
Modulo 4 - La selezione binaria 1 - aprire il foglio di lavoro salvato alla fine della lezione precedente 2 - spostarsi ad un nuovo Foglio della cartella di lavoro o eventualmente inserirlo, e rinominarlo "SELEZ. BINARIA" 3 - bordare le celle B2 e D2 e inserire in ciascuna di esse un numero 4 - inserire nel foglio un pulsante di comando con le seguenti proprietà: oggetto proprietà Pulsante di comando Name Caption Width Height Left Top impostazione cmdOrdinaC ORDINE CRESCENTE 124,5 33 57 105 5 - si vuole programmare il pulsante in modo tale che il contenuto venga scambiato, solo se il primo numero è maggiore del secondo; al termine dell'esecuzione i due numeri si presenteranno quindi in ordine crescente. 6 - scriviamo il listato corrispondente all'algoritmo rappresentato dal diagramma di flusso sottostante. VIA Private Sub cmdOrdina_Click() Dim A as Integer (B2), (D2) vero If Range("B2").Value>Range("D2").Value Then (B2)>(D2) falso . A (B2) (B2) (D2) (D2) A A = Range("B2").Value Range("B2").Value = Range("D2").Value Range("D2").Value = A End If FINE End Sub PER UNA MAGGIORE INTERAZIONE: 7 - inserisci un nuovo pulsante cmdInserimDati, attribuendogli il seguente codice Private Sub cmdInserimDati_Click() Range("B2") = InputBox("Dammi un numero", "Cella B2") Range("D2") = InputBox("Dammi un secondo numero", "Cella D2") End Sub Esercizio 1 - borda la zona A1:E20 e attribuiscile uno sfondo colorato - inserisci un secondo pulsante dal nome cmdOrdinaD, in modo che sia contenuto dellail pulsante zona appena evidenziata -all'interno programma perché permetta di ordinare il contenuto delle celle B2 e D2 in modo decrescente, dopo aver rappresentato il diagramma di flusso corrispondente. Istruzione di SELEZIONE BINARIA Consideriamo i seguenti schemi a blocchi: vero cond falso istr1v istr1f istr2v istr2f vero cond falso istr1v istr2v in linguaggio VBA si traducono rispettivamente: If cond Then istr1v istr2v .. Else istr1f istr2f .. End If If cond Then istr1v istr2v .. End If Solo se il caso per vero comprende un'unica istruzione: If cond Then istr Solo se sia il caso per vero sia quello per falso comprendono ciascuno un'unica istruzione: If cond Then istrV Else istrF Le condizioni cond si esprimono mediante l’uso dei cosiddetti operatori relazionali, che nel linguaggio VBA si indicano come segue: = uguale < minore <= minore o uguale <> diverso > maggiore >= maggiore o uguale Questi permettono p.e. di confrontare il contenuto di una cella o di una variabile (numerica o alfanumerica) con un certo valore costante o con il risultato di un’espressione, che a sua volta può contenere i riferimenti ad altre celle o variabili. Le condizioni da verificare possono anche essere composte mediante gli operatori logici (o operatori booleani), che nel linguaggio VBA si indicano come segue: NOT (negazione) AND (congiunzione) OR (disgiunzione non esclusiva) XOR (disgiunzione esclusiva) IMP (implicazione materiale) EQV (doppia implicazione) Esercizio 2 - sempre nel foglio "SELEZIONE BINARIA" borda la zona A22:G30 e attribuiscile uno sfondo colorato - all'interno della zona appena evidenziata, borda le celle B23, D23 ed F23, borda la cella C25 ed inserisci alla sua destra un pulsante con le seguenti proprietà: oggetto proprietà Pulsante di comando Name Caption impostazione cmdMax3 MASSIMO - programma il pulsante perché visualizzi nella cella C25 il massimo tra i valori contenuti nelle celle B23, D23 ed F23 SUGGERIMENTO: confrontato il contenuto delle prime due celle ed individuato il mag-giore tra i due numeri, si tratta di confrontare il valore individuato con il contenuto della terza cella...; descrivi l'algoritmo in un diagramma di flusso (che prevede il ricorso a due successive strutture di selezione, una ad un ramo ed una a due rami) e traducilo in linguaggio VBA. Esercizio 3 - sempre all'interno della zona A22:G30, borda la cella C29 e inserisci alla sua destra un pulsante, programmandolo in modo che individui il minimo tra i valori contenuti nelle celle B23, D23 ed F23, dopo aver descritto l'algoritmo in un diagramma di flusso (attribuisci al pulsante un nome ed una caption opportune) Esercizio 4 - sempre nel foglio "SELEZIONE BINARIA" borda la zona A32:G40 e attribuiscile uno sfondo colorato - all'interno della zona appena evidenziata, borda le celle B33, D33, F33 attribuendo loro uno sfondo bianco; inserisci quindi un pulsante con le seguenti proprietà: oggetto proprietà Pulsante di comando Name Caption impostazione cmdOrdinaC3 ORDINE CRESCENTE - si vuole programmare il pulsante in modo che i tre numeri contenuti nelle celle B23, D23 ed F23 vengano riordinati in modo crescente; analizziamo il problema, supponendo di aver assegnato per comodità i valori contenuti nelle celle B23, D23 ed F23 rispettivamente alle variabili num1, num2, num3: - per riordinare tre numeri num1, num2 ed num3 in modo crescente si può procedere confrontando num1 con num2: se num2 risulta minore di num1, si esegue lo scambio tra il contenuto delle variabili (cfr. algoritmo dello scambio): fatto questo, in num2 si trova il maggiore tra i primi due numeri. - confrontando num2 con num3, se num3 non è minore di num2, significa che i tre numeri sono già riordinati come richiesto; se invece num3 è minore di num2 eseguiamo lo scambio: in questo modo in num3 sarà ora memorizzato il più grande dei tre numeri - resta da verificare se num1 è minore di num2 ed eseguire eventualmente l’ultimo scambio necessario - rappresentare l'algoritmo descritto in un diagramma di flusso - programmare il pulsante cmdOrdinaC3 traducendo l'algoritmo nel linguaggio VBA - Inserire un nuovo foglio di lavoro denominato DIS TRIANGOLARE; inserire in tale foglio un pulsante. 9 - Programmare il pulsante in modo che visualizzi un messaggio opportuno nella cella A5, dopo che si sia stabilito se tre valori contenuti nelle celle A1, A2 ed A3 del foglio di lavoro possono essere le misure dei tre lati di un triangolo VIA Private Sub …. Dim M As Single (B23), (D23), (F23) If Range("B23").Value<Range("D23").Value Then vero (B23)<(D23) falso M = Range("D23").Value Else M (D23) vero M (B23) M<(F23) M = Range("B23").Value End If If M<Range("F23").Value Then M = Range("F23").Value End If M (F23) (C25) M FINE Range("C25").Value = M End Sub