Come separare un URL nei suoi componenti

Giordano ha la necessità di suddividere un URL nei suoi componenti. Se l’URL completo (https://www.acme.com/prodotti) è nella colonna A, vorrebbe avere il dominio principale (acme o acme.com) nella colonna B e il percorso (prodotti) nella colonna C.

Esistono diversi modi per risolvere questo problema. Se è necessario eseguire questa operazione solo una o due volte, potrebbe essere più semplice utilizzare lo strumento Testo in colonne, disponibile nella scheda Dati della barra multifunzione. Quando specifichi come desideri che lo strumento separi le stringhe di testo, devi indicare che desideri utilizzare la barra (/) come delimitatore. A seconda del modo in cui gli URL originali sono messi insieme, ciò potrebbe richiedere un po’ di “pulizia” una volta terminato lo strumento, ma è semplice e veloce.

Se fosse un’operazione che devi eseguire frequentemente, potresti trarre vantaggio dall’utilizzo di una formula per manipolare l’URL. Il primo compito è estrarre il dominio dall’URL, ma questo è un po’ più complicato di quanto sembri. Ad esempio, l’URL può iniziare con un numero qualsiasi di identificatori di protocollo (come http://, https://, ftp:// e così via) oppure potrebbe non iniziare affatto con uno specificatore di protocollo. Inoltre, potresti voler eliminare la nomenclatura “www.”, in quanto alcuni la ritengono estranea. Per capire dove inizia il dominio “reale”, potresti utilizzare questa formula nella colonna B:

=SE.ERRORE(TROVA("www.";$A1)+4;SE.ERRORE(TROVA("://";$A1;1)+3;1))

 

La formula restituisce la posizione del primo carattere dopo “www.”, se disponibile. Se non è presente, restituisce la posizione del primo carattere dopo “://”, se presente. Se non è presente, viene restituito il numero 1, poiché l’URL non contiene alcun prefisso di protocollo o www.

Con quel valore nella colonna B, puoi quindi iniziare a estrarre effettivamente le parti che desideri. Quanto segue, posto nella colonna C, restituirà il dominio, come già descritto. Essenzialmente restituisce tutto, dalla posizione del carattere mostrata nella colonna B fino alla barra successiva (/).

=STRINGA.ESTRAI(A1;B1;SE.ERRORE(TROVA("/";A1;B1)-B1;LUNGHEZZA(A1)))

 

Se l’URL originale includeva “www.acme.com”, la formula restituirà “acme.com”. Se contiene un sottodominio diverso da “www” (come “ricerca.acme.com”), viene restituito il dominio completo incluso il sottodominio. La funzione SE.ERRORE è inclusa nel caso in cui non sia presente la barra (/) dopo il nome di dominio (La funzione TROVA restituisce un errore #VALORE se non riesce a trovare l’elemento che sta cercando).

Per estrarre il percorso dopo il dominio, puoi utilizzare la seguente formula nella colonna D:

=SE.ERRORE(STRINGA.ESTRAI(A1;TROVA("/";A1;B1)+1;LUNGHEZZA(A1));"")

 

La formula restituisce tutto quello che si trova dopo la prima barra (/) che si trova dopo il nome di dominio. Se non è presente una barra dopo il nome di dominio, non restituisce nulla (questo è, ancora una volta, grazie all’uso della funzione SE.ERRORE).

La chiave per utilizzare le formule di cui sopra, come spiegato, è la colonna di supporto B. Se volessi eliminare la necessità della colonna B, dovresti sostituire nelle altre due formule tutte le istanze di B1 con la formula (senza il segno uguale) che appartiene a B1. Ciò, ovviamente, renderebbe le altre due formule piuttosto lunghe, specialmente quella annotata per la colonna C.

Se lo desideri, puoi creare una macro che essenzialmente faccia la stessa cosa, senza la necessità di una colonna di supporto. L’esempio seguente prevede che tu effettui una selezione, quindi estragga le parti dell’URL dalle celle e le posizioni nelle due colonne a destra della selezione.

 

Sub PartiDiURL()
    Dim c As Range
    Dim sRaw As String
    Dim J As Integer
    
    For Each c In Selection
        sRaw = c.Text
        J = InStr(sRaw, "://")
        If J > 0 Then sRaw = Mid(sRaw, J + 3)
        If LCase(Left(sRaw, 4)) = "www." Then
            sRaw = Mid(sRaw, 5)
        End If
        J = InStr(sRaw, "/")
        If J > 0 Then
            c.Offset(0, 1) = Left(sRaw, J - 1)
            c.Offset(0, 2) = Mid(sRaw, J + 1)
        Else
            c.Offset(0, 1) = sRaw
            c.Offset(0, 2) = ""
        End If
    Next c
End Sub

 

 

 

Tags: , , , , , , , , , , , ,

Ti è stato utile?