Estrarre il numero civico
Avete bisogno di estrarre il numero civico da una lista di indirizzi e non avete idea di come fare? Siete al lavoro e vi trovate con un insieme di indirizzi in cui via e civico sono nella stessa cella excel e avete necessità di estrarre il numero civico in una cella a parte? Excelsapeviche vi viene in aiuto mostrandovi un metodo molto efficace. Ma vi diremo di più: successivamente all’estrazione del numero civico è possibile ricavare anche la sola via dall’intero indirizzo.
Sappiamo bene che gli indirizzi possono essere stringhe con diversi numeri e non contenere solamente il civico, altrimenti sarebbe stato un gioco da ragazzi. Il problema di estrarre il numero civico dalla stringa indirizzo infatti è che questa potrebbe contenere anche altri numeri, pensate per esempio all’indirizzo “via 20 settembre 3 int 10”.
Purtroppo excel non possiede una funzione nativa che faccia questo mestiere, perciò abbiamo bisogno di crearcela da soli, tramite l’ausilio di VBA (Visual Basic for Applications).
Innanzitutto ecco il codice VBA da usare:
Function NumCiv(Num As Range) As Double
Dim T As String
Dim C As String
Dim D As String
Dim E As String
Dim i As Integer
Dim IsNum_i As Boolean
Dim IsNum_j As Boolean
Dim Anni As Variant
Dim Mesi As Variant
Dim m As Variant
Application.Volatile True
T = UCase(Num.Value)
Anni = Array("1943", "1944", "1945", "1866", "1980", "1981", "1859", "1971", "1921")
For Each m In Anni
T = Replace(T, m, "")
Next m
C = ""
D = ""
E = ""
IsNum_i = False
IsNum_j = False
Mesi = Array("GENNAIO", "FEBBRAIO", "MARZO", "APRILE", "MAGGIO", "GIUGNO", "LUGLIO", "AGOSTO", "SETTEMBRE", "OTTOBRE", "NOVEMBRE", "DICEMBRE")
For Each m In Mesi
If InStr(T, m) > 0 Then
For i = InStr(T, m) + 1 To Len(T) + 1
If Mid(T, i, 1) <= "9" And Mid(T, i, 1) >= "0" Then
IsNum_i = True
Else
IsNum_i = False
End If
If Mid(T, i - 1, 1) <= "9" And Mid(T, i - 1, 1) >= "0" Then
IsNum_j = True
C = C + Mid(T, i - 1, 1)
Else
IsNum_j = False
End If
If D <> "" And E = "" And IsNum_j = True And IsNum_i = False Then
E = C
C = ""
ElseIf D = "" And IsNum_j = True And IsNum_i = False Then
D = C
C = ""
End If
Next i
End If
Next
If InStr(T, "GENNAIO") = 0 And InStr(T, "FEBBRAIO") = 0 And InStr(T, "MARZO") = 0 And InStr(T, "APRILE") = 0 And InStr(T, "MAGGIO") = 0 And InStr(T, "GIUGNO") = 0 And InStr(T, "LUGLIO") = 0 And InStr(T, "AGOSTO") = 0 And InStr(T, "SETTEMBRE") = 0 And InStr(T, "OTTOBRE") = 0 And InStr(T, "NOVEMBRE") = 0 And InStr(T, "DICEMBRE") = 0 Then
For i = 2 To Len(T) + 1
If Mid(T, i, 1) <= "9" And Mid(T, i, 1) >= "0" Then
IsNum_i = True
Else
IsNum_i = False
End If
If Mid(T, i - 1, 1) <= "9" And Mid(T, i - 1, 1) >= "0" Then
IsNum_j = True
C = C + Mid(T, i - 1, 1)
Else
IsNum_j = False
End If
If D <> "" And E = "" And IsNum_j = True And IsNum_i = False Then
E = C
C = ""
ElseIf D = "" And IsNum_j = True And IsNum_i = False Then
D = C
C = ""
End If
Next i
End If
If D <> "" Then
NumCiv = CDbl(D)
Else
NumCiv = 99999999
End If
End Function
Con questo codice VBA abbiamo quindi creato la funzione personalizzata NumCiv, che vuole in input solo la cella di riferimento contenente l’indirizzo completo. Ritornando al nostro indirizzo di esempio, proviamo ad applicare la nuova funzione NumCiv
come potete vedere, anche se l’indirizzo contiene altri numeri, la funzione pesca astutamente il civico.
Di seguito vi riportiamo alcuni esempi di utilizzo della NumCiv
A questo punto vi diciamo che è possibile estrarre anche la via senza civico. Dopo aver ricavato il numero civico con la funzione NumCiv basta applicare questa funzione
=SE.ERRORE(SINISTRA(A1; RICERCA(C1;A1;1)-1); A1)
Per la funzione SINISTRA vi rimandiamo al nostro articolo.
Per qualsiasi dubbio, informazione, o se vi siete mai chiesti qualcosa su excel che nessuno è riuscito a spiegarvi, contattateci!