› Sviluppare funzionalita su Microsoft Office con VBA › dividere la via dal numero civico
-
AutoreArticoli
-
Buongiorno ho molte vie del tipo "via giovanni conti 252 in un'unica cella vorrei che in una cella ci fosse la via e nella cella accanto il numero civico. Grazie dell'aiuto
Ciao
Se ho capito bene, si potrebbe usare la funzione SPLIT con delimitatore " " (spazio) ed assume l'ultimo valore dell'array.
Ciao,
Mario
Probabilmente gli indirizzi sono scritti nel modo più disparato, ad esempio "via giovanni conti 252", "via giovanni conti, 252", "via giovanni conti n. 252", "via giovanni conti 252 int 13 scala B" eccetera.
Il punto è come identificare un criterio univoco per separare il testo dal numero. Un'idea potrebbe essere che il numero è separato dal testo che lo precede da uno spazio, quindi basta cercare l'ultimo spazio inserito e dividere la stringa in quel punto, ma che succede negli ultimi due esempi che ho fatto un attimo fa?
Io e Mario ci siamo sovrapposti, ma come vedi il problema è proprio quello.
In che senso non la trovi? Fa parte del linguaggio e si applica a una stringa per restituire valori separati da un delimitatore, ad esempio:
v = Split("uno, due, tre", ",") restituisce un vettore (un array) di elementi il cui indice di partenza è zero; puoi recuperare gli elementi puntando ad essi con il loro indice numerico:
v(0) = "uno"
v(1) = "due"
v(2) = "tre"La variabile v va sempre dimensionata come Variant.
Mi dispiace ma è troppo per me non riesco a tirar fuori una sub non l'ho mai fatto e non conoscevo la funzione split. Grazie per l'attenzione.
Niente è mai davvero "troppo" 😀
Scrivi i passi che faresti se dovessi farlo a mano. Poi lo traduci in VBA. Facciamo l'ipotesi semplice (indirizzo -spazio- numero)- imposta un ciclo da Q2 a Q1000
- ad ogni passaggio considera il valore della cella
- assegna a una variabile, per esempio s, il contenuto della cella
- se Trim(s) = stringa vuota, ignora
- altrimenti calcola la posizione dell'ultimo spazio (utilizza InStr) e metti posizione in n
- prendi i primi n caratteri a sinistra di s (è l'indirizzo) e mettili nella cella che stai esaminando
- prendi i caratteri da n fino a lunghezza di s (Len (s) ) e mettili nella cella a fianco
- ripeti finché il ciclo non è finitoSalve a tutti
Vediamo se può bastare per le diverse forme di indirizzo (escluso l'esempio posto da vecchio frac
in cui è compresa l'indicazione della scala e dell'interno)Ho ipotizzato l'indirizzo in A1 ed ho immaginato un numero civico max di 4 cifre; ho inserito in C1 questa formula:
=DESTRA(A1;LUNGHEZZA(A1)-TROVA(" ";A1;LUNGHEZZA(A1)-4))
Mi sembra che dia il risultato richiesto qualunque sia la forma di indirizzo scelta.
Ciao,
Mario
qualunque sia la forma di indirizzo scelta.
La formula è ottima e funziona bene. Ma non con "qualunque forma di indirizzo" 🙂
Se l'indirizzo è, poniamo, "via giuseppe verdi, n. 15 scala A interno 18", restituisce 18 (che è giusto solo se stabiliamo che il numero civico è l'ultimo numero presente nell'indirizzo). E' evidente, come abbiamo già detto, che ci vuole nu criterio univoco di costruzione degli indirizzi, altrimenti è, per dirla tecnicamente, un casino 🙂Ciao Francesco
Come avevo precisato, la formula proposta è valida per "quasi" tutti gli indirizzi tranne il caso da te evidenziato.
Talvolta, dico, bisogna accontentarsi quando trovare la esatta soluzione sarebbe troppo arduo.
Ciao,
Mario
@Marius ti ho lasciato un messaggio in bottiglia in Area51... grazie 😀
-
AutoreArticoli
