La consultazione del forum è libera per tutti.
Per poter porre un quesito è invece necessario essere un utente registrato (clicca qui se non lo sei).
Tutti gli utenti che richiedono un supporto, come da REGOLAMENTO, sono caldamente invitati ad allegare un file di esempio con l'indicazione di quello che si desidera ottenere.
Salve
vorrei sapere se è possibile, e come fare per, ottenere la seguente formattazione in una o più celle di un foglio di Excel:
dopo aver formattato le celle con testo a capo, mi servirebbe che nella seconda riga il rientro avvenisse non allineato con la prima ma dopo "n" spazi vuoti (nell'esempio allegato 7 spazi)
Allego il file di esempio:
Spiegandomi meglio, vorrei che la frase contenuta nella cella:
3456 Il governo ottiene la fiducia con 172 sì. Il M5s non vota.
Draghi da Mattarella
comparisse con la seguente formattazione:
3456 Il governo ottiene la fiducia con 172 sì. Il M5s non vota.
Draghi da Mattarella
Grazie
Ciao,
scusa ma che c'entra il file che allegato:
Dove sarebbero i "rientri" che vuoi ottenere?
Ad ogni modo, sempre che non abbia capito male, quando crei la nuova stringa, nella "concatenazione" puoi usare anche la funzione RIPETI(" ";7) dove il 7 indica quante volte deve essere ripetuto lo spazio.
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."
Scusami ma ho caricato il file sbagliato !!!!
Ho formattato una colonna di Excel con testo a capo ed allineamento a sinistra.
Ogni stringa contiene sempre un numero iniziale di 4 o 5 caratteri.
In molti casi la stringa è più lunga della colonna e quindi si osserva il rientro a capo.
Per tale motivo molte celle contengono due righe, naturalmente tutte allineate a sinistra.
Tanto premesso a me servirebbe che nei casi in cui avviene il rientro (perché la “frase” è più lunga della colonna) la seconda riga non fosse, anch’essa, allineata a sinistra ma alla prima lettera dopo il numero .
Tanto premesso a me servirebbe che nei casi in cui avviene il rientro (perché la “frase” è più lunga della colonna) la seconda riga non fosse, anch’essa, allineata a sinistra ma alla prima lettera dopo il numero .
Se a determinare la "mandata a capo" è solamente la larghezza della colonna, mi spiace ma a mio modo di vedere non puoi essere preciso.
Diverso se sei tu a determinare ogni quante lettere si deve mandare a capo.
Rimane il fatto che se tale "formattazione" la vuoi nella stessa cella (quindi senza creare una nuova stringa) allora devi usare per forza il VBA.
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."
Se ho capito bene ciò che mi interessa si può fare solo con il VBA.
E' possibile averne il codice ? (da utilizzare nel file esempio allegato)
Grazie
Ciao,
scusa ma d'estate il tempo libero è quello che è...
Certo Excel non è proprio il software adatto per queste "manipolazioni" di stringhe, comunque, con VBA puoi ottenere una cosa del genere:
Per avere il testo correttamente allineato devi per forza utilizzare dei font monospazio (io ho usato Courier New ).
Il codice è assegnato al pulsante che vedi in foto; seleziona la cella che vuoi "formattare" e clicca sul pulsante.
Il codice utilizzato:
Sub IndentMyCell() Dim i As Long Dim ActString As String Dim NewString As String Dim LastSpaceCh As Integer Dim ActSpaceCh As Integer Dim FirstTab As Integer Dim FirstSpace As Integer Dim ActLine As Integer Dim NumCh As Integer Dim StrLen As Integer Dim LastCh As Integer Dim InitCh As Integer ActString = Replace(ActiveCell.Value, Chr(10), "") For i = 1 To 100 ActString = Replace(ActString, " ", " ") Next i FirstSpace = InStr(1, ActString, " ") FirstTab = 10 'numero di spazi per il rientro StrLen = 50 'numero caratteri per linea ActLine = 1 InitCh = 1 If FirstSpace = 0 Then GoTo Ultima_Parte ActString = Mid(ActString, 1, FirstSpace - 1) & Replace(ActString, " ", Space(FirstTab - FirstSpace + 1), FirstSpace, 1) LastCh = Len(ActString) For i = 1 To LastCh If i < LastCh Then If Mid(ActString, i, 1) = " " Then LastSpaceCh = ActSpaceCh ActSpaceCh = i - InitCh + 1 If ActSpaceCh > IIf(ActLine > 1, StrLen - FirstTab, StrLen) Then NewString = NewString & Mid(ActString, InitCh, LastSpaceCh - 1) & Chr(10) & Space(FirstTab) ActLine = ActLine + 1 InitCh = InitCh + LastSpaceCh End If End If DoEvents End If Next i Ultima_Parte: NewString = NewString & Mid(ActString, InitCh, StrLen) With ActiveCell .Value = Trim(NewString) .Font.Name = "Courier New" 'Font Monospaced .WrapText = True .ColumnWidth = 200 .EntireColumn.AutoFit .EntireRow.AutoFit End With End Sub
modifica questi due numeri per la spaziatura del rientro e il numero di caratteri per linea:
Adatta il codice per le tue reali esigenze.
Ti riallego il file...
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."
Ti ringrazio
per l'uso che devo farne mi sembra un pò complesso anche per la presenza di un pulsante di comando che implica comunque ulteriori azioni..
Pertanto accetto tranquillamente quanto hai scritto in prima battuta "...Se a determinare la "mandata a capo" è solamente la larghezza della colonna, mi spiace ma a mio modo di vedere non puoi essere preciso. E' esattamente ciò che speravo fosse possibile, ma purtroppo non è così. Mi adeguerò.
Ti ringrazio per la disponibilità. Buon lavoro.
per l'uso che devo farne mi sembra un pò complesso anche per la presenza di un pulsante di comando che implica comunque ulteriori azioni..
il pulsante è a scopo d'esempio, non sapendo la struttura reale del tuo file.
Per questo motivo ti ho scritto di adattarlo; potresti ad esempio sfruttare l'evento Change del foglio per rendere tutto automatico.
In alternativa passa a Word che essendo un editor di testo ha anche questa funzione integrata.
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."