STRINGA



  • STRINGA
    di LUIGINO (utente non iscritto) data: 28/10/2012 08:58:45

    Ho un foglio di excel nel quale ho la colonna a contenente un migliao di celle composte da un codice di 5 caratteri, due spazi vuoti + nome vario + due spazi e data :
    esempio : 10000 Roma Via dei Cipressi Marco Rossi appuntamento etc. del 14 Novembre 2012 .
    ho bisogno di creare due macro che :
    1^ Copia in automatico tutto il testo escluso i primi 5 caratteri numerici e i due spazi vuoti della colonna a nella colonna b ovvero parta da Roma ..... fino in fondo .
    2^ Copia in automatico solo la data finale della cella nella colonna c ovvero 14 Novembre 2012
    3^ La colonna a deve rimanere intatta .
    Sicuramente per voi non e' un problema ma io da profano non so come fare .
    grazie mille in anticipo.
    luigino



  • di Vecchio Frac data: 28/10/2012 09:05:04

    Se già sai come scrivere un po' di codice ti suggerisco di consultare le funzioni InstrRev(), Left() e Right() oppure Mid() nella Guida per capire come lavorano e come puoi servirtene.
    Con Left() puoi recuperare i primi 5 caratteri del codice.
    InstrRev, più interessante, ti servirà a rintracciare il primo spazio vuoto a partire dalla fine della stringa, con Right (o Mid: preferenza personale) prelevi i caratteri più a destra della stringa a partire dall'enne-simo che ti interessa.
    A essere precisi puoi recuperare il codice della stringa anche con Val() che ti darà esattamente il valore dei primi cinque caratteri convertiti in numero (es. 12345 via dei cipressi restituisce 12345 come numero, mentre Left restituisce "12345" come stringa di testo) .
    Infine devi implementare un ciclo per tutte le celle del range che prelevi questi valori e li ricopi dove vuoi tu.
    Questo è quello che ti serve sapere.
    Per difficoltà tecniche siamo qui ;)






  • di LUIGINO (utente non iscritto) data: 28/10/2012 10:33:49

    Non credevo in una risposta cosi' veloce e per questo ti ringrazio ma il problema e che per me e' arabo .
    Saresti cosi' gentile da scrivermi una stringa tu, anche perche' per me e ' fantascenza .

    Ancora Grazie . Luigino



  • di Vecchio Frac data: 28/10/2012 13:57:41

    Ti scrivo un codice di esempio. Niente di speciale, anche se a volte la fantascienza supera la realtà ^_^
     
    Sub leggi_colonna
    for each ac in [A:A]    'esamina cella per cella della colonna A
        if trim(ac) = "" then exit sub   'esce alla prima riga vuota
        ac.offset(,1) = mid(ac, 7)    'copia in B la stringa dal 7° carattere in poi, escludendo il codice iniziale
        ac.offset(,2) = trim(mid(ac instrrev(ac, " " , instrrev(ac, " " )-1)-2))
    next
    End Sub
    






  • di LUIGINO (utente non iscritto) data: 28/10/2012 17:27:08

    E' tutto il pomeriggio che ci provo ma ottengo :
    Nella prima riga ovvero ........ Sub leggi_colonna .......compaiono () e diventa tutta gialla -

    Nella riga con ..... ac.offset(,2) = trim(mid(ac instrrev(ac, " " , instrrev(ac, " " )-1)-2)) i caratteri diventano rossi e mi da un errore di sintassi .
    Quindi non succede niente .

    Riesci a dedicarci ancora un po' di tempo .

    Grazie mille .

    Luigino



  • di Vecchio Frac data: 28/10/2012 18:50:24

    Mancava una parentesi.
    Avendolo scritto di getto, non l'ho provato.
    Adesso l'ho inserito nel foglio Excel ed effettivamente adesso funziona come hai chiesto :)
     
    Option Explicit
    
    Sub leggi_colonna()
    Dim ac As Range
    
    For Each ac In [A:A]    'esamina cella per cella della colonna A
        If Trim(ac) = "" Then Exit Sub   'esce alla prima riga vuota
        ac.Offset(, 1) = Mid(ac, 7)   'copia in B la stringa dal 7° carattere in poi, escludendo il codice iniziale
        ac.Offset(, 2) = Trim(Mid(ac, InStrRev(ac, " ", InStrRev(ac, " ") - 1) - 2))
    Next
    End Sub
    






  • di LUIGINO (utente non iscritto) data: 28/10/2012 20:21:41

    Purtroppo ancora niente :
    la colonna a contiene piu' di mille celle cosi' composte :
    00001 Marco Bianchi appuntamento e cena del 14 Ottobre 2012
    00002 Garibaldi Giuseppe pratica da consegnare del 10 Maggio 2013
    e cosi' via
    La macro dovrebbre riportarmi nella celle della colonna b tutto escluso la numerazione esistente ovvero
    Marco Bianchi appuntamento e cena del 14 Ottobre 2012
    Garibaldi Giuseppe pratica da consegnare del 10 Maggio 2013
    e cosi' via
    e dovrebbre riportarmi nelle celle della colonna c solo le date
    14 Ottobre 2012
    10 Maggio 2013

    Spero si possa fare con una stringa di facile impostazione . Ancora grazie e buona serata . Luigino



  • di Vecchio Frac data: 28/10/2012 20:34:50

    Mi meraviglio molto che non funzioni.
    Il codice che ho postato (seconda versione) fa proprio quello che chiedi e come nel pdf allegato (stavolta l'ho verificato e si comporta nel modo voluto).
    L'unica cosa che non fa è aggiustare la larghezza delle colonne (prova ad allargare manualmente e vedrai che i dati sono stati estratti come hai chiesto).
    Ottieni qualche messaggio di errore? ottieni qualche risultato imprevisto? allega un'immagine del risultato dopo l'elaborazione sul tuo foglio.