Sostituire lettere con numeri
Oggi vedremo come sostituire lettere con numeri creando a tutti gli effetti una crittografia per scrivere messaggi segreti.
Per fare questa operazione di sostituzione tra un carattere e l’altro useremo la funzione: SOSTITUISCI
Nell’intervallo Q2:R6 ho indicato le lettere che andremo a cambiare e facendo una sostituzione alla volta otterremo il nostro messaggio codificato.
Partiamo sostituendo la lettera “O” con lo “0”, quindi nella cella A2 scriviamo:
=SOSTITUISCI(A1;”O”;”0″)
Ripetiamo l’operazione appena fatta questa volta sostituendo la “I” con un “1”
Nella cella A3 scriviamo:
=SOSTITUISCI(A2;”I”;”1″)
Proseguiamo cambiando la “E” con il “3”
Nella cella A4 scriviamo:
=SOSTITUISCI(A3;”E”;”3″)
Ora è il turno di sostituire lettera “S” con il numero “5”
Nella cella A5 scriviamo:
=SOSTITUISCI(A4;”S”;”5″)
Ed infine facciamo diventare “7” la lettera “T”
Quindi nella cella A6 digitiamo:
=SOSTITUISCI(A5;”T”;”7″)
Ad ogni passaggio andiamo a codificare la frase di partenza, ognuno di noi è libero di scegliere le lettere ed i numeri da usare e soprattutto quante sostituzioni effettuare.
Ma che ne dite se creassimo una macro che ci permetta con la semplice pressione di un pulsante di fare in modo automatico ciò che abbiamo appena visto? Pensate sia difficile? Niente affatto saranno sufficienti poche righe di codice.
Se non avete idea di cosa sia una macro e come iniziare a scrivere codice VBA vi consiglio caldamente di vedere la sessione dedicata alle macro, perché la maggior parte dei passaggi che vedremo sono già stati spiegati in modo più specifico.
Spostiamoci nel foglio Macro, portiamoci in Sviluppo, scegliamo Macro, diamo il nome alla nostra macro, che chiameremo “codifica” quindi Crea.
Quello che dovremo fare sarà sfruttare il ciclo FOR per sostituire una alla volta le lettere presenti nella colonna A con i rispettivi numeri della colonna B, ma prima assegniamo alla variabile: “stringa” il contenuto della cella F1, quindi:
stringa = Range(“F1”)
Poiché il ciclo FOR assumerà il valore delle righe in cui sono contenute numeri e lettere scriveremo:
For riga = 2 To 11
Indichiamo, tramite il comando Cells, dove andare a prendere la lettera di partenza, con la variabile che chiameremo “VAL_DA” ed il numero che sostituirà la lettera tramite la variabile “VAL_A”
VAL_DA = Cells(riga, 1)
VAL_A = Cells(riga, 2)
È arrivato il momento di usare la funzione sostituisci, ricordatevi che quando usiamo il codice VBA le funzioni vanno scritte in inglese, in tal caso ciò che ci serve è la funzione Replace.
E poiché il risultato della nostra sostituzione lo metteremo nella cella F2, scriveremo:
Range(“F2”) = Replace(stringa, VAL_DA, VAL_A)
Per le sostituzioni successive la variabile “stringa” dovrà assumere il valore della cella F2 quindi
stringa = Range(“F2”)
Ora facciamo in modo di rallentare le varie sostituzioni inserendo una pausa di 1 secondo, questo ci permetterà di veder funzionare la macro che piano piano sostituirà una lettera dietro l’altra.
Application.Wait (Now() + TimeValue(“00:00:01”))
Per finire non dimentichiamo di far avanzare il ciclo FOR quindi:
Next riga
Ok, la macro è stata creata:
Sub codifica()
stringa = Range(“F1”)
For riga = 2 To 11
VAL_DA = Cells(riga, 1)
VAL_A = Cells(riga, 2)
Range(“F2”) = Replace(stringa, VAL_DA, VAL_A)
stringa = Range(“F2”)
Application.Wait (Now() + TimeValue(“00:00:01”))
Next riga
End Sub
non ci resta che associarla ad un pulsante, dalla scheda Sviluppo andiamo su Inserisci e scegliamo dai Controlli modulo, un Pulsante.
Associamo la Macro “codifica” e diamo OK.
Modifichiamo il nome del pulsate in “CODIFICA”
Ed ora godiamoci il frutto del nostro lavoro, con una sostituzione dietro l’altra il nostro messaggio verrà crittografato.
Inutile dire che il numero di sostituzioni e quali caratteri sostituire sta alla discrezione di ognuno di noi.
E se volessimo fare il passaggio inverso, quindi decodificare il messaggio?
Partendo dalla macro che abbiamo appena creato sarà sufficiente apportare giusto 2 o 3 modifiche.
Facciamo quindi un copia e incolla delle righe di codice, rinominiamo la macro in “decodifica”
La variabile stringa non sarà più contenuta nella cella F1, ma in F2
stringa = Range(“F2”)
ed ora sarà sufficiente invertire gli indirizzi delle variabili VAL_DA e VAL_A, perché dobbiamo fare il processo inverso, trasformare i numeri in lettere.
VAL_DA = Cells(riga, 2)
VAL_A = Cells(riga, 1)
Non dobbiamo modificare altro.
Sub decodifica()
stringa = Range(“F2”)
For riga = 2 To 11
VAL_DA = Cells(riga, 2)
VAL_A = Cells(riga, 1)
Range(“F2”) = Replace(stringa, VAL_DA, VAL_A)
stringa = Range(“F2”)
Application.Wait (Now() + TimeValue(“00:00:01”))
Next riga
End Sub
Come fatto in precedenza dovremo associare la nuova macro ad un pulsante, come fatto prima, dalla scheda Sviluppo andiamo su Inserisci e scegliamo dai Controlli modulo, un Pulsante.
Associamo la Macro “decodifica” e diamo OK.
Modifichiamo il nome del pulsate in “DECODIFICA”
Facciamo partire la macro e con un passaggio dietro l’altro il nostro messaggio tornerà come quello di partenza.
Qui trovate il link dove scaricare il foglio con le macro che abbiamo appena creato, così potrete dare sfogo alla vostra fantasia.
Nel video qui sotto trovate tutti i passaggi appena illustrati, buona visione.
https://youtu.be/mPMuCJBz75Q