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-09-28T07:54:28+00:00

    guarda non so come si aggiunge una macro standard...

    oggi ho riutilizzato la macro e mi da sempre larghezza colonna 50, a questo punto mi viene il dubbio che la larghezza della colonna è differente dal numero di caratteri della stringa più larga, mi sbaglio?

     

    cioè se ho una sola riga con una stringa di 43 caratteri, la colonna mi verrà larga 43 o no? a me serve che le colonna non siano piu' larghe di 43: con arial e punti 10

    Arial è un carattere proporzionale, cioè la larghezza di i e a, ad esempio, non è la stessa. Scivi cinque a in A1 e cinque i in A2 e vedi di cosa sto scrivendo. Quindi non puoi basarti sulla quantità di caratteri che si trovano nella cella. Non ho detto di aggiungere una macro standard, ma un modulo standard(ALT+F11, Inserisci-->Modulo) e di copiarvi la macro.


    --

    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
  2. Anonimo
    2010-09-28T07:28:33+00:00

    guarda non so come si aggiunge una macro standard...

    oggi ho riutilizzato la macro e mi da sempre larghezza colonna 50, a questo punto mi viene il dubbio che la larghezza della colonna è differente dal numero di caratteri della stringa più larga, mi sbaglio?

    cioè se ho una sola riga con una stringa di 43 caratteri, la colonna mi verrà larga 43 o no? a me serve che le colonna non siano piu' larghe di 43: con arial e punti 10

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2010-09-24T14:54:11+00:00

    HAI PIENAMENTE RAGIONE!!

     

    Come darti torto,cercavo solo di rendere le idee più chiare ma invece, il risultato è stato l'opposto.

     

    ecco la stringa:

     

    ROSATI PADRE GIANCARLO C/O CONVENTO MONTE SANTO

    B1=ROSATI PADRE GIANCARLO C/O CONVENTO MONTE

    C1= SANTO

    non so perchè ma quando faccio adatta larghezza colonna me la riporta su 49,43 (351pixel) 

    ho bisogno come ti dicevo che le colonne b1 e c1 non siano maggiori di 43.

     

    P.s non mi serve separare nome cognome ecc...

    A me risultano altri valori. Metti questa macro in un modulo standard:

    Public Sub a()

        With ActiveCell

            MsgBox "Contenuto cella: " & .Value & _

                vbNewLine & "Larghezza cella: " & .ColumnWidth & _

                vbNewLine & "Caratteri in cella: " & Len(.Value)

        End With

    End Sub

     seleziona la cella che ti da problemi e lancia la macro: che valori ottieni? I miei riscontri, per quella cella particolare, sono:

    • Larghezza: 48,43
    • Caratteri: 40

    E sei sicuro che sia quella la cella che da problemi? Voglio dire, non è che ci sia una cella più larga sotto?

    Prova anche ad aggiungere questa riga di codice prima di End With nella macro precedente:

    .Columns("B:B").EntireColumn.AutoFit


    --

    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
  4. Anonimo
    2010-09-24T12:29:09+00:00

    HAI PIENAMENTE RAGIONE!!

    Come darti torto,cercavo solo di rendere le idee più chiare ma invece, il risultato è stato l'opposto.

    ecco la stringa:

    ROSATI PADRE GIANCARLO C/O CONVENTO MONTE SANTO

    B1=ROSATI PADRE GIANCARLO C/O CONVENTO MONTE

    C1= SANTO

    non so perchè ma quando faccio adatta larghezza colonna me la riporta su 49,43 (351pixel) 

    ho bisogno come ti dicevo che le colonne b1 e c1 non siano maggiori di 43.

    P.s non mi serve separare nome cognome ecc...

    La risposta è stata utile?

    0 commenti Nessun commento