Spostare contenuto celle



  • Spostare contenuto celle
    di AleM (utente non iscritto) data: 03/01/2014 10:14:41

    Buongiorno a tutti,
    vi chiedo un aiuto. Ho un file di Excel con circa 2000 righe. Su ogni riga ho una cella del tipo NOME COGNOME EMAIL, tutto nella stessa cella. Io dovrei spostare la MAIL su un'altra colonna lasciando inalterato NOME COGNOME. Finora ho fatto con Taglia e Incolla però vorrei sapere se ci sono formule o metodi più veloci.

    grazie, Alessio



  • di patel data: 03/01/2014 10:37:43

    allega un file di esempio con 10 righe, non 2000, e col risultato desiderato





  • di Grograman (utente non iscritto) data: 03/01/2014 10:44:39

    Testo in colonne?



  • di AleM (utente non iscritto) data: 03/01/2014 10:54:19

    Ecco allegato un file di esempio, in pratica adesso ho la situazione "PRIMA" e vorrei diventasse come "DOPO"



  • di scossa data: 03/01/2014 11:07:48

    Visto che siamo su Excel VBA, una semplice UDF come sotto.

    Uso: ipotizzando A4 la cella con la stringa complessa, nella cella dove vuoi l'indirizzo scrivi:
    =EmailAddress(A4)
     
    Function EmailAddress(ByVal sTesto As String) As String
      Dim sRet As String
      Dim aToken As Variant
      Dim j As Long
      
      aToken = Split(sTesto, " ")
      For j = LBound(aToken) To UBound(aToken)
        sRet = aToken(j)
        If InStr(sRet, "@") > 0 Then
          EmailAddress = sRet
          Exit For
        End If
      Next
    End Function
    



  • di AleM (utente non iscritto) data: 03/01/2014 11:34:20

    scossa come ti posso ringraziare? suggeimento eccezionale, grazie infinite, mi hai risolto un mare di guai. Adesso dovrei eliminare la mail dalla prima colonna......vediamo se ci riesco da solo

    grazie ancora



  • di AleM (utente non iscritto) data: 03/01/2014 11:57:03

    Inconveniente inaspettato....se vado a cancellare la mail dalla prima colonna mi cancella in automatico la mail che ho "scorporato" con la funziona suggerita qui sopra, immagino perchè la funziona si appoggia proprio alla prima colonna. Quindi come potrei fare per rimuovere la mail dalla prima cella senza avere ripercussioni sull'altra?



  • di scossa data: 03/01/2014 12:18:55

    cit: "...Quindi come potrei fare per rimuovere la mail dalla prima cella senza avere ripercussioni sull'altra?"

    Prima di rimuovere l'indirizzo dalla prima colonna fai un copia-incolla valori della colonna dove hai estratto la sola email.



  • di scossa data: 03/01/2014 12:19:50

    ovviamente copia-incolla valori su "se stessa".



  • di AleM (utente non iscritto) data: 03/01/2014 12:48:44

    Sto provando a cancellare la mail dalla prima colonna con Trova/Sostituisci scrivendo un'espressione regolare che mi cancelli da questa colonna tutti i termini che contengono @. Ho scritto
    [! ]*@*
    però non me la accetta. Così facendo io vorrei trovare tutte le parole contenenti @ e sostituirle con niente.



  • di scossa data: 03/01/2014 13:47:44

    Il "trova" (e sostituisci) di Excel non accetta le regex, per cui devi ricorrere al VBA.
    Puoi usare la seguente macro, da eseguire previa selezione delle celle da cui vuoi eliminare l'indirizzo email.
     
    Sub EliminaEmail()
      Dim rng As Range
      Dim cella As Range
      Dim re As Object
      Dim sParsed As String
      Const sPatt As String = " [A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}"
       
      Set re = CreateObject("VBScript.RegExp")
      Set rng = Selection
      re.Global = True
      For Each cella In rng
        re.Pattern = sPatt
        re.IgnoreCase = True
        sParsed = re.Replace(cella.Text, "")
        cella.Value = sParsed
      Next
      
      Set rng = Nothing
      Set re = Nothing
    End Sub
    



  • di Grograman (utente non iscritto) data: 03/01/2014 14:51:33

    Soluzione orribile con le formule? ^_^

    Sicuramente c'è un modo più bello, ma così mi è uscita
     
    Per il nome:
    =SINISTRA(A4;LUNGHEZZA(A4)-LUNGHEZZA(STRINGA.ESTRAI(STRINGA.ESTRAI(A4;TROVA(" ";A4;1)+1;LUNGHEZZA(A4));TROVA(" ";STRINGA.ESTRAI(A4;TROVA(" ";A4;1)+1;LUNGHEZZA(A4));1)+1;LUNGHEZZA(STRINGA.ESTRAI(A4;TROVA(" ";A4;1)+1;LUNGHEZZA(A4))))))
    
    
    Per la mail:
    =STRINGA.ESTRAI(STRINGA.ESTRAI(A4;TROVA(" ";A4;1)+1;LUNGHEZZA(A4));TROVA(" ";STRINGA.ESTRAI(A4;TROVA(" ";A4;1)+1;LUNGHEZZA(A4));1)+1;LUNGHEZZA(STRINGA.ESTRAI(A4;TROVA(" ";A4;1)+1;LUNGHEZZA(A4))))
    
    



  • di Grograman (utente non iscritto) data: 03/01/2014 14:52:59

    Mi sono fumato un "-1" per i nomi :D


     
    =SINISTRA(A4;LUNGHEZZA(A4)-LUNGHEZZA(STRINGA.ESTRAI(STRINGA.ESTRAI(A4;TROVA(" ";A4;1)+1;LUNGHEZZA(A4));TROVA(" ";STRINGA.ESTRAI(A4;TROVA(" ";A4;1)+1;LUNGHEZZA(A4));1)+1;LUNGHEZZA(STRINGA.ESTRAI(A4;TROVA(" ";A4;1)+1;LUNGHEZZA(A4)))))-1)



  • di scossa data: 03/01/2014 15:05:12

    E se fosse
    MARIO LUIGI ROSSI mario.rossi@mail.it

    che succede?



  • di Grograman (utente non iscritto) data: 03/01/2014 15:08:08

    Che la formula fa cilecca :P



  • di Grograman (utente non iscritto) data: 03/01/2014 15:08:39

    Oltre a farmi venire voglia di giocare a super mario bros!



  • di scossa data: 03/01/2014 17:08:46

    Ovviamente le istruzioni

    re.Pattern = sPatt
    re.IgnoreCase = True

    si possono mettere fuori dal ciclo.

     
    Sub EliminaEmail()
      Dim rng As Range
      Dim cella As Range
      Dim re As Object
      Dim sParsed As String
      Const sPatt As String = " [A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}"
      
      Set re = CreateObject("VBScript.RegExp")
      Set rng = Selection
      re.Global = True
      re.Pattern = sPatt
      re.IgnoreCase = True
      For Each cella In rng
        sParsed = re.Replace(cella.Text, "")
        cella.Value = sParsed
      Next
      
      Set rng = Nothing
      Set re = Nothing
    End Sub