- Dettagli
- Scritto da Alessandra
- Pubblicato: 17 Maggio 2019
- Visite: 7470
Chi lavora spesso con i dati, sa bene che è necessario gestire correttamente il loro formato. Ad esempio la funzione CERCA.VERT non funziona se i dati da confrontare non sono tutti dello stesso tipo, cioè tutti numeri o tutti testi. Oggi vogliamo proporvi delle semplici routine VBA per ottenere questo risultato. Allegato al post troverete un componente aggiuntivo che potete aggiungere al vostro Excel per avere sempre a disposizione questa funzionalità.
Il primo codice che vi propongo è molto semplice e si limita a convertire i numeri in testi.
Public Sub DaNumeriATesto()
Dim intervallo As Range
Dim cella As Range
Set intervallo = ActiveCell.CurrentRegion
For Each cella In intervallo
cella = cella.Value & ""
Next
End Sub
La routine converte in testi tutti i numeri compresi nelle celle contigue a quella in cui si trova il mouse. La conversione è attuata semplicemente concatenando una stringa vuota ai valori già presenti nelle celle.
Se volessimo complicare un po' le cose e fare in modo che si possa anche scegliere di aggiungere degli zeri davanti al numero convertito in testo e scegliere se convertire l'intera selezione, la cella selezionata o tutte le celle contigue ad essa, potremmo ricorrere alle routine che seguono
Private Function numeroZeri() As String
Dim intZeri As Integer
Dim formato As String
Dim i As Integer
intZeri = Application.InputBox("Quante cifre?", Type:=1)
For i = 1 To intZeri
formato = formato & "0"
Next
numeroZeri = formato
End Function
Public Sub DaNumeroATesto()
Dim intervallo As Range
Dim cella As Range
Dim strValore As String
Dim zeri As String
Dim intrisposta As Integer
Dim intervalloSelezionato As Range
Dim intersezione As Range
Set intervallo = Selection
If Selection.Address <> ActiveCell.CurrentRegion.Address Then
intrisposta = MsgBox("Vuoi espandere la selezione?", vbYesNoCancel, "Attenzione")
Select Case intrisposta
Case vbYes
Set intervallo = ActiveCell.CurrentRegion
Case vbNo
Set intervallo = Selection
End Select
End If
zeri = numeroZeri
For Each cella In intervallo
strValore = "'" & Format(cella.Value, zeri)
cella = strValore
Next
End Sub
La funzione numeroZeri chiede all'utente di quante cifre si deve comporre il numero convertito e quindi compone una stringa costituita da tanti zeri quante sono le cifre necessarie. Questa stringa sarà poi utilizzata dalla funzione Format usata nella Sub DaNumeroATesto per effettuare la conversione. Questa funzione converte un numero in un testo col il formato specificato. La stringa composta nella funzione numeroZeri serve proprio per specificare il formato. Ogni zero sta per una cifra obbligatoria. Se nel numero da convertire non sono presenti cifre sufficienti si aggiungono zeri a sinistra fino a raggiungere il numero necessario di cifre.
L'operazione di conversione inversa, cioè da testo a Numero è più semplice. Basta una semplice moltiplicazione per 1.
Public Sub DaTestoANumero()
Dim intervallo As Range
Dim cella As Range
Dim strValore As String
Dim zeri As String
Dim intrisposta As Integer
On Error GoTo Errore
Set intervallo = Selection
If Selection.Address <> ActiveCell.CurrentRegion.Address Then
intrisposta = MsgBox("Vuoi espandere la selezione?", vbYesNoCancel, "Attenzione")
Select Case intrisposta
Case vbYes
Set intervallo = ActiveCell.CurrentRegion
Case vbNo
Set intervallo = Selection
End Select
End If
For Each cella In intervallo
cella = cella * 1
Next
Exit Sub
Errore: MsgBox "non è possibile effettuare a conversione"
End Sub
Come installare un componente aggiuntivo?
Per concludere vi ricordo come installare il componente aggiuntivo fornito in questo articolo. Nella scheda Sviluppo, scegliete Componenti aggiuntivi di Excel, quindi nella nuova finestra scegliete Sfoglia ed individuate il file del componente aggiuntivo. Il componente aggiuntivo verrà aggiunto alla finestra (si chiama Conversioni) e sarà selezionato.
.png)
Una volta installato il componente aggiuntivo, vedrete nella scheda Dati, i pulsanti per lanciare le routine di conversione
.png)
NOTA BENE Il codice è fornito così come è. Non ci assumiamo nessuna responsabilità sui danni eventualmente derivanti dal suo utilizzo che avviene comunque sempre a rischio e pericolo dell'utente.


