Estrarre il numero civico

Estrarre il numero civico

Giugno 11, 2021 Off Di excelsapeviche

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

numero civico

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

estrazione civico indirizzo

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)

estrazione via indirizzo

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!