Condividi:        

Elenco puntato in excel

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Elenco puntato in excel

Postdi wallace&gromit » 18/04/19 14:35

In una tabella excel mi succede di dovere alternare del testo in forma di elenco puntato con altro testo lungo, che richiede di andare a capo. Tutto deve essere allineato a sinistra. Nel primo caso posso usare due colonne, ma nell'altro caso devo unire le celle, altrimenti non riesco a mandare a capo il testo in modo ragionevole. Forse non mi sono spiegato bene ma qui potete trovare un file esplicativo.

Quello che vorrei è avere un modello versatile, che mi permetta di creare l'elenco puntato o meno, in funzione delle esigenze.

http://www.filedropper.com/elencopuntato
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Sponsor
 

Re: Elenco puntato in excel

Postdi zsadist » 18/04/19 15:15

non ho capito bene cosa ti serve (lo so, non capisco mai :()

vedi se ti basta inserire il carattere di ritorno a capo nella cella..


ad esempio, scrivi nella cella

="Oggi mi sono" & CODICE.CARATT(10) & "bevuto 8 caffè"
Adattati! L'incapacità di cambiare direzione porta alla sconfitta
zsadist
Utente Junior
 
Post: 96
Iscritto il: 04/04/19 13:48

Re: Elenco puntato in excel

Postdi wallace&gromit » 18/04/19 16:39

no, questo non basta, è questione di allineamento, che ho espresso male.

Nell'elenco numerato ho un numero a sinistra e del testo sulla sua destra.
Quando Il testo va a capo si trova allineato alla riga superiore e non si trova mai sotto al numero.
In altri paragrafi non ho il numero e in quel caso tutto il testo deve trovarsi allineato a sinistra.
Se riservo una colonna stretta per i numeri dell'elenco numerato funziona per quelli, ma poi, andando a scrivere un paragrafo normale, mi trovo a dovere unire le celle, altrimenti non riesco ad andare a capo.

Penso che nel file si capisca questo problema, alla riga 10.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Elenco puntato in excel

Postdi Anthony47 » 19/04/19 01:51

Avevo tempo fa preparato una macro che fa una specie di Elenco puntato nelle celle multi-riga (con a-capo nella cella inserito come Alt-Enter)
Ad esempio con questa macro:
Codice: Seleziona tutto
Sub Puntato2()
'Usa "*"
Dim myC As Range, Punter As String, bStyle As String
'
''Punter = "l "       '<<< Il crt di puntuazione + spazio
bStyle = "Normal"
For Each myC In Selection
    If Application.WorksheetFunction.IsText(myC) Then
        myC.Value = Replace(Replace(myC.Formula, Chr(10) & "*", Chr(10), , , _
          vbBinaryCompare), Chr(10), Chr(10) & "*", , , vbBinaryCompare)
    End If
Next myC
End Sub
Lavora sull'area selezionata, e produce un output del tipo
Codice: Seleziona tutto
Elenco:
*Primo codice
*Secondo con testo lungo e
wrap-text automatico
*Terzo codice
(il "puntato" viene inserito in testa a una riga creata con Alt-Enter)

Con codice piu' complesso si possono ottenere simboli di puntuazione utilizzando il font Wingdings.


Tu pero' parli di realizzare elenchi numerati mantenendo l'allineamento nei casi in cui i testo viene interrotto e mandato a capo per fine spazio nella cella, e la cosa (lavorando con font a spaziatura differenziata) a me sembra possibile solo usando due colonne.

Quindi:
1) identifica la colonna in cui vorresti inserire delle celle con elenco numerato; supponiamo che il tutto sia limitato alle prime 100 righe.
2) se il foglio contiene gia' dei dati, allora fai Inserisci-Colonna prima della colonna che dovra' contenere elenchi puntati (in modo da avere questa colonna vuota)

3) Usa questa macro per unire, da riga 2 a riga 100, la colonna a cui appartiene la cella selezionata con la colonna PRECEDENTE:
Codice: Seleziona tutto
Sub Unisce()
Dim I As Long, J As Long
'
J = Selection.Cells(1, 1).Column
If J = 1 Then
    Beep
    Exit Sub
End If
For I = 2 To 10
    If Cells(I, J).MergeCells = False And Cells(I, J - 1).MergeCells = False Then
        With Cells(I, J - 1).Resize(1, 2)
            .MergeCells = True
            .WrapText = True
            .IndentLevel = 0
            .Interior.ColorIndex = xlNone       
        End With
    End If
Next I
End Sub
La riga1 viene lasciata con celle separate; eventualmente unisci a mano o modifica il codice per partire da 1

4) Compila ora il foglio con le informazioni, compreso le scritte nelle colonne che sono state (parzialmente) unute

5) Come facciamo a riconoscere le celle da trasformare in elenchi numerati da quelle che invece devono rimanere standard? Come facciamo a sapere quando la numerazione deve fermarsi ed eventualmente ripartire daccapo?
Supponiamo che quelle standard abbiano applicato un colore di fondo, che puo' essere anche bianco (ma va applicato); e supponiamo di processare solo le celle facenti parte della selezione corrente (e diamo per scontato che siano selezionate celle nell'area che era stata unita).
Con queste supposizioni, allora ci dovrebbe aiutare questa macro:
Codice: Seleziona tutto
Sub Numera()
Dim myC As Range
'
For Each myC In Selection
    If myC.MergeCells And myC.Interior.ColorIndex = xlNone And myC.Value <> "" Then
        myC.MergeCells = False
        myC.Cells(1, 2) = myC.Cells(1, 1)
        myC.Cells(1, 1).Value = Application.WorksheetFunction.Max(Selection) + 1
    End If
Next myC
End Sub

Seleziona l'area che vuoi trasformare in elenco numerato (in cui hai precedentemente applicato un colore di fondo a piacere ma non Nullo) ed esegui la Sub Numerati

6) Se il risultato non va bene, seleziona l'area da "disfare" ed esegui quest'altra macro:
Codice: Seleziona tutto
Sub Denumera()
Dim myC As Range, LMC As Long
'
LMC = Selection.Cells(1, 1).Column
For Each myC In Selection
    If myC.MergeCells = False And IsNumeric(myC.Cells(1, 1).Value) And myC.Column = LMC Then
        myC.Cells(1, 1).ClearContents
        myC.Cells(1, 1).Resize(1, 2).MergeCells = True
    End If
Next myC
End Sub


Non so se le ipotesi fatte possono quadrare per te; se Sì allora fai un po' di prove e vedi che cosa c'e' di utile.

Comunque fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19213
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Elenco puntato in excel

Postdi wallace&gromit » 19/04/19 11:46

Spunti utili parecchi...
Visto che posso limitare abbastanza bene il range in cui operare e visto che posso anche utilizzare la colonna A come appoggio sto optando per una soluzione in cui il criterio per passare all'elenco numerato sia il contenuto delle celle in colonna A, anche perché la numerazione non è necessariamente crescente e con inizio al no. 1.
Quindi per il momento, sul file di prova, ho modificato così:
Codice: Seleziona tutto
Sub Numera2()

For I = 6 To 10
    If Cells(I, 1).Interior.ColorIndex <> 15 Then
    If Cells(I, 1) <> "" Then
        Cells(I, 2).MergeCells = False
        Cells(I, 3) = Cells(I, 2)
        Cells(I, 2) = Cells(I, 1)
        Cells(I, 3).Resize(1, 2).MergeCells = True
        Cells(I, 1).Interior.ColorIndex = 15
    End If
    Else: Cells(I, 2) = Cells(I, 1)
    End If
Next I
End Sub

Sub Denumera2()
For I = 6 To 10
    If Cells(I, 1).Interior.ColorIndex = 15 Then
    If Cells(I, 1) = "" And Cells(I, 2).MergeCells = False Then
        Cells(I, 1).Interior.ColorIndex = xlNone
        Cells(I, 2).ClearContents
        Cells(I, 2).Resize(1, 2).MergeCells = True
    Else: Cells(I, 2) = Cells(I, 1)
    End If
    End If
Next I


End Sub

Per il momento è tutto, buona Pasqua!!!
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Elenco puntato in excel

Postdi wallace&gromit » 23/04/19 14:25

La Pasqua ha portato consiglio.
Visto che comunque tutto si gioca sull'inserimento o meno di testo nella colonna A ho trasformato in un evento worksheet_change.
Ogni volta che scrivo un numero in colonna A la macro verifica se le celle delle colonne B, C e D sono unite, se sì separa la B e vi inserisce il numero, se sono già separate modifica il numero. Se invece cancello un dato, la cella di colonna B viene unita alle colonne C e D:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
        I = Target.Row
    If Target.Value <> "" Then
        If Cells(I, 2).MergeCells = True Then
        Cells(I, 2).MergeCells = False
        Cells(I, 3) = Cells(I, 2)
        Cells(I, 2) = Cells(I, 1)
        Cells(I, 3).Resize(1, 2).MergeCells = True
        Else: Cells(I, 2) = Cells(I, 1)
        End If
    Else:
        If Cells(I, 2).MergeCells = False Then
        Cells(I, 2).ClearContents
        Cells(I, 2).Resize(1, 2).MergeCells = True
        End If
    End If
End If
End Sub
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Elenco puntato in excel

Postdi Anthony47 » 23/04/19 18:28

Perfetto, vedo che basta una spintarella e poi il moto continua...
Alla prossima
Avatar utente
Anthony47
Moderatore
 
Post: 19213
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Elenco puntato in excel":


Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti