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