taglio di una stringa excel con separatori personalizzati

Anonimo
2010-07-07T11:01:43+00:00

salve,

Ho bisogno di una funzione che mi tagli le stringa piu lunghe di 47(334pxl) con un criterio pero' nel senso che non dve tagliare a caso ma bensì dopo uno spazio, in modo tale da non far perdere significato.

es:

A                                                                                 

ADOLFO COLOMBO  PRESIDENTE COLLEGIO INGEGNERI   ARCHITETTI

B

voglio che mi tagli da ingegneri in poi!

il problema è dovuto alla stampante che si blocca se do' indirizzi maggiodi di 334 pxl

è una formula che dovrei fare per circa 12000 indirizzi

Help!

Grazie.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2010-09-17T19:19:51+00:00

se minore di 43 non dobbiamo fare nulla, dobbiamo lasciarlo così com'è!

dove finisce il testo della cella tagliato? in b1 e c1?

Sì. Cioè, il testo di quanto contenuto in A(n) viene messo in B(n) (max primi 43 caratteri) e C(n) (caratteri successivi). Ma hai provato?


--

La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

--

Mauro Gamberini - Microsoft© MVP(Excel)

http://www.maurogsc.eu/

mi da errore run time '9' poi mi dice fine o debug, se faccio debug mi evidenzia in giallo questa riga del codice:     Set sh = ThisWorkbook.Worksheets("Foglio1") 

edit:

ho capito il problema era il nome del foglio! modificato e funziona ma alcuni indirizza fa una cosa del genere:

a1=

PIZZERIA LA FERRIERA AGRITURISMO LA FERRIERA DI CEPPAROTTI MARIA TER

b1=

PIZZERIA LA FERRIERA AGRITURISMO LA DI TER

c1=

FERRIERA CEPPAROTTI MARIA

 

come mai non splitta bene? altri indirizzi sono ok!

si potrebbe aggiungere una funzione che porta in b1 gli indirizzi con caratteri minori di 43?

Prova così, sostituendo la precedente:

Public Sub m()

    Dim sh As Worksheet

    Dim lUltRiga As Long

    Dim lng As Long

    Dim la As Long

    Dim sa() As String

    Dim s1 As String

    Dim s2 As String

    Dim bln As Boolean

    Application.ScreenUpdating = False

    Set sh = ThisWorkbook.Worksheets("Foglio1")

    With sh

        lUltRiga = .Range("A" & .Rows.Count).End(xlUp).Row

        For lng = 1 To lUltRiga

            If Len(.Cells(lng, 1).Value) > 43 Then

                s1 = ""

                s2 = ""

                bln = False

                sa = Split(.Cells(lng, 1).Value, " ")

                For la = 0 To UBound(sa())

                    If Len(s1 & sa(la)) - 1 < 43 And bln = False Then

                        s1 = s1 & sa(la) & " "

                    Else

                        bln = True

                        s2 = s2 & sa(la) & " "

                    End If

                Next

                .Cells(lng, 2).Value = Trim(s1)

                .Cells(lng, 3).Value = Trim(s2)

            Else

                .Cells(lng, 2) = .Cells(lng, 1).Value

            End If

        Next

    End With

    Application.ScreenUpdating = True

    Set sh = Nothing

End Sub

L'errore che riscontri:

*mi da errore run time '9' poi mi dice fine o debug, se faccio debug mi evidenzia in giallo questa riga del codice:     Set sh = ThisWorkbook.Worksheets("Foglio1") *

è dato dal fatto che forse non hai il Foglio1. Sostituisci Foglio1 con il nome del foglio dove hai l'elenco(sempre fra virgolette). Scusa per il ritardo nelle risposte, ma sono un  po' occupato. Grazie per l'attenzione e fai sapere se hai risolto.


--

La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

--

Mauro Gamberini - Microsoft© MVP(Excel)

http://www.maurogsc.eu/

La risposta è stata utile?

0 commenti Nessun commento

49 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2010-07-19T10:41:30+00:00

    Quello che chiedi non è molto chiaro. Posso, nel caso che proponi, ricorrere ad una ormula con 2 funzioni per eliminare dopo il 47 carattere tutto ciò che si trova dopo ad uno spazio:

    A1: ADOLFO COLOMBO  PRESIDENTE COLLEGIO INGEGNERI   ARCHITETTI

    B1: =SINISTRA(C11;TROVA(" ";C11;47))

    e in B1 mi troverò: ADOLFO COLOMBO  PRESIDENTE COLLEGIO INGEGNERI. Tutto questo però non agisce sulla stampante. La stampante stampa quello che trova sul foglio, quindi devo intervenire *prima* che i dati le siano inviati. Altra soluzione potrebbe essere quella di andare a capo nella cella. Puoi gentilmente spiegare meglio le tue esigenze? Grazie. 


    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    perfetto è quello che mi serve!! pero' ho bisogno anche dell'altra parte dell'indirizzo tagliata!

    a1:ADOLFO COLOMBO  PRESIDENTE COLLEGIO INGEGNERI

    b1:ARCHITETTI

    come faccio?

    alla stampante basta dare il foglio con questi parametri

    A1: ADOLFO COLOMBO  PRESIDENTE COLLEGIO INGEGNERI ARCHITETTI

    B1: =SINISTRA(C11;TROVA(" ";C11;47))

    C1: =STRINGA.ESTRAI(A1;47;LUNGHEZZA(A1))

    In b1 troverò: ADOLFO COLOMBO  PRESIDENTE COLLEGIO INGEGNERI  e in C1 troverò: ARCHITETTI


    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2010-07-19T10:33:52+00:00

    in pratica devo splittare un indirizzo in a1 piu' lungo di 43 in 2 parti una in b1 ed una in c1

    a1:

    ADOLFO COLOMBO  PRESIDENTE COLLEGIO INGEGNERI   ARCHITETTI

    b1:

    ADOLFO COLOMBO  PRESIDENTE

    c1:

    COLLEGIO INGEGNERI   ARCHITETTI

    attualmente utilizzo questa:

    47 - CONFRONTA(VERO; STRINGA.ESTRAI(A1; {46;45;44;43;42;41;40;39;38;37;36}; 1) = " "; 0)

    SINISTRA(A1;B1-1)

    STRINGA.ESTRAI(A1; B1+1; 47)

    rispettivamente in b1, c1, d1

    pero' mi viene difficile modificarle ogni qual volta che cambio margine della stampante che varia da 43 a 47

    soluzioni?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2010-07-19T10:23:11+00:00

    Quello che chiedi non è molto chiaro. Posso, nel caso che proponi, ricorrere ad una ormula con 2 funzioni per eliminare dopo il 47 carattere tutto ciò che si trova dopo ad uno spazio:

    A1: ADOLFO COLOMBO  PRESIDENTE COLLEGIO INGEGNERI   ARCHITETTI

    B1: =SINISTRA(C11;TROVA(" ";C11;47))

    e in B1 mi troverò: ADOLFO COLOMBO  PRESIDENTE COLLEGIO INGEGNERI. Tutto questo però non agisce sulla stampante. La stampante stampa quello che trova sul foglio, quindi devo intervenire *prima* che i dati le siano inviati. Altra soluzione potrebbe essere quella di andare a capo nella cella. Puoi gentilmente spiegare meglio le tue esigenze? Grazie. 


    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    perfetto è quello che mi serve!! pero' ho bisogno anche dell'altra parte dell'indirizzo tagliata!

    a1:ADOLFO COLOMBO  PRESIDENTE COLLEGIO INGEGNERI

    b1:ARCHITETTI

    come faccio?

    alla stampante basta dare il foglio con questi parametri

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2010-07-11T13:49:13+00:00

    Quello che chiedi non è molto chiaro. Posso, nel caso che proponi, ricorrere ad una ormula con 2 funzioni per eliminare dopo il 47 carattere tutto ciò che si trova dopo ad uno spazio:

    A1: ADOLFO COLOMBO  PRESIDENTE COLLEGIO INGEGNERI   ARCHITETTI

    B1: =SINISTRA(C11;TROVA(" ";C11;47))

    e in B1 mi troverò: ADOLFO COLOMBO  PRESIDENTE COLLEGIO INGEGNERI. Tutto questo però non agisce sulla stampante. La stampante stampa quello che trova sul foglio, quindi devo intervenire *prima* che i dati le siano inviati. Altra soluzione potrebbe essere quella di andare a capo nella cella. Puoi gentilmente spiegare meglio le tue esigenze? Grazie. 


    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento