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