PopAds.net - The Best Popunder Adnetwork

Manipolazione stringhe Excel

  • STRINGHE di ENZO
    AVREI UN QUESITO DA SOTTOPORVI:
    SE IN UNA CELLA EXCEL, ES A1 HO UN INDIRIZZO CON UN NUMERO CIVICO COME POSSO ESTRARRE IL NUMERO CIVICO OSSIA ELIMINARLO DALLA CELLA A1 E SPOSTARLO IN UN ALTRA CELLA ES. B1
    HO PROVATO CON STRINGAESTRAI MA NON ME LA ELIMINA FISICAMENTE DALLA PRIMA CELLA
    PONENDO LA DOMANDA IN UN ALTRO MODO:
    DATO UN ELENCO DI INDIRIZZI POSTI IN A1 A2 A3 ETC
    CHE MACRO POSSO COSTRUIRE AFFINCHE DA QUESTE CELLE VENGANO TOLTI I NUMERI CIVICI E POSTI NELLE CELLE ADIACENTI B1 B2 B3 ETC
    GRAZIE

    di Apoben64
    Ciao Enzo, per quanto attiene da una parte del tuo quesito posto che in A1 hai : Viale Europa 36 , in B2 per estrarre il 36, digiti la formula =DESTRA(A1;2), dove "2" sono i caratteri che ti servono.

    di Mauro
    Potresti crearti una routine in vba che partendo da dx scansioni byte x byte estrae i numeri e li pone su una stringa mentre il resto in un'altra. Nella sezione sintassi c'è un paragrafo che tratta le funzioni di manipolazione delle stringhe in VB.
    Dovrebbero bastarti le funzioni: Mid(), Len() e l'operatore IsNumeric.
    Se hai voglia provaci, poi fammi sapere!
    Probabilmente, con un po' di ingegno, c'è il modo di farlo anche con le formule di excel, senza chiamare in gioco VBA.

    di ENZO
    CARO MAURO HO PROVATO CON QUELLO CHE MI HAI DETTO TU. ES IN A1 HO "VIA PIPPO 2"
    CON LA ROUTINE
    A = Len(Range("A1.Value)
    Range("B" & I).Select
    ActiveCell.Value = A
    OTTENGO IN B1 LA LUNGHEZZA DELLA MIA STRINGA
    NON CAPISCO COME POSSO UTILIZZARE LE FUNZIONI MID E IS NUMERIC
    CON MID ESTRAGGO DA UNA STRINGA QUELLO CHE VOGLIO MA DEVO INDICARGLI DA CHE POSIZIONE PARTIRE QUANTI BYTE E COSA ESTRARRE
    CON ISNUMERIC OTTENGO VERO O FALSO SE LA STRINGA CONTIENE SOLO NUMERI O SOLO LETTERE
    MA SE ES HO INDIRIZZI CON NUMERI CIVICI DIVERSI COME POSSO FARE ES VIA AAA 5 VIA AAA 55
    TU MI PARLAVI DI ANALIZZARE DA DESTRA UNA STRINGA BYTE PER BYTE MA COME FACCIO A FARGLI RICONOSCERE I NUMERI ED ESTRARLI
    ME PUOI THANKS

    di mauro
    ... ma si va, giusto xchè 6 tu...

    VarIni = "via Ugo Foscolo 3210"
    LVarIni = Len(VarIni)
    For I = LVarIni To 0 Step -1
    If Not IsNumeric(Mid(VarIni, I, 1)) Then
    Exit For
    End If
    Next
    MsgBox Mid(VarIni, 1, I)
    MsgBox Mid(VarIni, I + 1, LVarIni)

    problema è se hai un numero civico 31/B.

    di ENZO
    TI RINGRAZIO SEI STATO VERAMENTE MOLTO GENTILE
    PS. INFATTI IL PROBLEMA SI PONE SE IL NUMERO CIVICO E' 3/B

    di enzo
    caro mauro ma secondo te non c'e' il modo di baypassare la lettera del numero civico, considerando che il blocco del numero civico si distacca dall'indirizzo con degli spazi?

    di Mauro
    Puoi provare a mettere un altro ciclo in testa ke testi sempre byte x byte ma ke questa volta esca x isnumeric. e quindi estrarre la coda alfabetica della stringa. Devi essere sicuro però ke ci sia il numero civico, se no tagli fuori tutto.
    Ad ogni modo adesso gli strumenti ci sono tutti, basta metterci solo un po' di logica ed il gioco è fatto.
    Fammi sapere!
    A presto.

    di ENZO
    GRAZIE MAURO PER IL TUO INTERVENTO
    ORA NON MI CHIAMARE ROMPISCATOLE MA AVREI UN ALTRO QUESITO
    AVENDO UN INDIRIZZO DEL TIPO 88 AVENUE XXXX
    HO MODIFICATO LA TUA ROUTINE COSI
    VarIni = "88 AVENUE XXXX"
    LVarIni = Len(VarIni)
    For I = 1 TO LVarIni Step 1
    If Not IsNumeric(Mid(VarIni, I, 1)) Then
    Exit For
    End If
    Next
    MsgBox Mid(VarIni, 1, I)
    MsgBox Mid(VarIni, I + 1, LVarIni)

    IL PROBLEMA E' CHE MI ESTRAE IL NUMERO CIVICO PARTENDO DA DESTRA MA IPOTIZZANDO CHE L'INDIRIZZO NON ABBIA IL NUMERO CIVICO, NEL PRIMO CASO LASCIAVA BLANK MENTRE ADESSO MI ESTRARE LO STESSO IL NUMERO CIVICO
    ESEMPIO
    VarIni = "AVENUE XXXX"
    LVarIni = Len(VarIni)
    For I = 1 TO LVarIni Step 1
    If Not IsNumeric(Mid(VarIni, I, 1)) Then
    Exit For
    End If
    Next
    MsgBox Mid(VarIni, 1, I)
    MsgBox Mid(VarIni, I + 1, LVarIni)
    NELLA PRIMA MSGBOX HO A
    NELLA SECONDA VENUE XXXX
    DOVE SBAGLIO??

    di Mauro
    Sai ke io vi aiuto volentieri se poi partecipate attivamente (e nn solo passivamente) al forum.
    Prova con:

    VarIni = " AVENUE XXXX"
    LVarIni = Len(VarIni)
    For I = 1 To LVarIni Step 1
    If Not IsNumeric(Mid(VarIni, I, 1)) Then
    Exit For
    End If
    Next
    'se I = 1 vuol dire ke non c'è numero civico
    'quindi muovo zero su I
    If I = 1 Then
    I = 0
    End If
    MsgBox Mid(VarIni, 1, I)
    MsgBox Mid(VarIni, I + 1, LVarIni)

    di ENZO
    TI RINGRAZIO MA C'E' UN PROBLEMA
    LA ROUTINE COSI' VA BENE MA SE L'INDIRIZZO DIVENTA 888 AVENUE XXX, 888 NON VIENE ESTRATTO
    IN POCHE PAROLE IO DESIDEREREI CHE LA ROUTINE CHE MI AVEVI SUGGERITO INIZIALMENTE PER ESTRARRE I NUMERI CIVICI PARTENDO DA DESTRA FUNZIONASSE ANCHE PARTENDO CON I NUMERI CIVICI DA SINISTRA
    GRAZIE PER L'INTERESSAMENTO

    di Mauro
    A questo punto le casistiche si sprecano, sta a te vedere le problematiche e cercare di risolvere secondo le tue esigenze. Forza so ke ce la puoi fare!