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."
