Sviluppare funzionalita su Microsoft Office con VBA dividere la via dal numero civico

Login Registrati
Stai vedendo 13 articoli - dal 1 a 13 (di 13 totali)
  • Autore
    Articoli
  • #35749 Score: 0 | Risposta

    giulioc
    Partecipante

      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

      #35751 Score: 0 | Risposta

      Marius44
      Moderatore
        58 pts

        Ciao

        Se ho capito bene, si potrebbe usare la funzione SPLIT con delimitatore " " (spazio) ed assume l'ultimo valore dell'array.

        Ciao,

        Mario

        #35752 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          272 pts

          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?

           

          #35753 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            Io e Mario ci siamo sovrapposti, ma come vedi il problema è proprio quello.

            #35754 Score: 0 | Risposta

            giulioc
            Partecipante

              Non trovo la funzione split

              #35756 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                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.

                #35758 Score: 0 | Risposta

                giulioc
                Partecipante

                  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.

                  #35759 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    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 è finito

                     

                    #35761 Score: 0 | Risposta

                    Marius44
                    Moderatore
                      58 pts

                      Salve 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

                      #35763 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        Marius44 ha scritto:

                        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 🙂

                        #35765 Score: 0 | Risposta

                        Marius44
                        Moderatore
                          58 pts

                          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

                          #35766 Score: 0 | Risposta

                          giulioc
                          Partecipante

                            Grazie siete mitici

                            #35767 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              272 pts

                              @Marius ti ho lasciato un messaggio in bottiglia in Area51... grazie 😀

                            Login Registrati
                            Stai vedendo 13 articoli - dal 1 a 13 (di 13 totali)
                            Rispondi a: dividere la via dal numero civico
                            Gli allegati sono permessi solo ad utenti REGISTRATI
                            Le tue informazioni: