separa stinghe



  • separa stinghe
    di paganiva (utente non iscritto) data: 27/07/2017 00:26:00

    saluti a tutti.
    avrei la necessità di estrarre gli indirizzi e mail, da una stringa lunghissima che ne contiene oltre 2000.
    Ogni indirizzo è separato dal successivo con un ";"
    la stringa è simile a questa
    aaaa@live.it; bbbbb@hotmail.it; ccc.ccc@yaoo.it; dddd.dd@gmail.com; anche@virgilio.it; montalbano@tiscali.it; anaterme@libero.it; baldi@gmail.com; audace@virgilio.it; assanoso@gmail.com; orcari@gmail.com; anese@tiscali.it; demy@gmail.com; ibbiena@gmail.com; lenzanosegreteria@yahoo.it; postrada@virgilio.it; tio1978@gmail.com; polo1969@tiscali.it; eano1948@libero.it; no1948@libero.it; o1948@libero.it; ps@figc-crt.org; selle@hotmail.it; cina@yahoo.it; grignano@gmail.com; calcio@yahoo.it; vese@libero.it; eta72@libero.it; albi@libero.it; alef56@gmail.com; dro.pugi@hotmail.it; alessandro@assicurazioni.it

    Il risultato ottenuto, dovrebbe essere un file di oltre 2000 righe contenente in ciascuna l'indirizzo separato.
    allego file di esempio.
    grazie




  • di Marius44 data: 27/07/2017 07:03:44

    Ciao
    con VBA è abbastanza semplice. Inserisci la macro sottostante in un modulo standard e lanciala.

    Fai sapere. Ciao,
    Mario
     
    Sub separa()
    testo = Range("A1")
    aa = Split(testo, ";")
    For i = 0 To UBound(aa)
        Cells(i + 3, 1) = Trim(aa(i))
    Next i
    End Sub



  • di Vecchio Frac data: 27/07/2017 09:10:05

    Marius ha centrato il bersaglio (io consiglio sempre Option Explicit in testa ai moduli, dichiarando sempre le variabili).
    Un'alternativa è la seguente, spalma l'array direttamente sul foglio (con le due varianti per trasferire i dati in colonna o in riga).
     
    Option Explicit
    
    Sub separa()
    Dim aa As Variant
    
        aa = Split(Range("A1"), ";")
        Range("A3").Resize(UBound(aa), 1).Value = Application.Transpose(aa)    '<<< in colonna, valori su righe successive
        'Range("A3").Resize(1, UBound(aa)).Value = aa    '<<< in riga, valori su colonne adiacenti
    End Sub






  • di patel data: 27/07/2017 12:19:50

    ottima soluzione VF, ma l'hai testata ? meglio aggiungere un + 1
     
        Range("A3").Resize(UBound(aa) + 1, 1).Value = Application.Transpose(aa)  '<<< in colonna, valori su righe successive
    






  • di Vecchio Frac data: 27/07/2017 13:21:44

    Vero @patel, mancava l'ultimo valore perchè il vettore parte da zero.
    +1

    E analogamente deve correggersi la seconda istruzione:
    'Range("A3").Resize(1, UBound(aa)+1).Value = aa    '<<< in riga, valori su colonne adiacenti






  • di paganiva (utente non iscritto) data: 27/07/2017 13:40:33

    Grazie Marius44, patel e Vecchio Frac.
    Funziona benissimo, anche l'opzione colonna adiacente.
    Saluti