Excel ha da tempo incluso la possibilità di unire celle adiacenti in un’unica cella più grande. Questa capacità è stata utilizzata da molti designer di fogli di lavoro per dare ai loro fogli di lavoro un aspetto raffinato e professionale.

Tuttavia, l’utilizzo di celle unite presenta un enorme svantaggio: non è possibile ordinare le tabelle che le includono. Se ci provi, riceverai un messaggio che dice: “L’operazione richiede che le celle unite abbiano le stesse dimensioni”.

La soluzione più ovvia al problema è non utilizzare celle unite.

Supponiamo, ad esempio, che tu abbia un foglio di lavoro in cui ogni “record” è effettivamente costituito da due righe e che la prima colonna del foglio di lavoro contenga celle unite. (Ogni record di due righe inizia con due celle unite che si estendono su due righe. Questa cella unita contiene un nome di progetto.)

È meglio separare le celle nella prima colonna, ma poi potresti chiederti come ordinare correttamente i record nel foglio di lavoro; come tenere insieme le coppie di righe durante un ordinamento. Puoi farlo inserendo il nome del progetto nella prima riga e il nome del progetto aggiunto con “zz” nella seconda riga. Ad esempio, se la prima riga contiene “Wilburn Chemical” (il nome del progetto), la seconda riga potrebbe contenere “Wilburn Chemicalzz”. Formatta la cella della seconda riga in modo che il nome non venga visualizzato (come il testo bianco su uno sfondo bianco) e puoi quindi ordinare correttamente come desideri.

Un’altra soluzione è utilizzare una macro per destreggiarsi tra il foglio di lavoro e completare l’ordinamento. Supponendo che le celle unite siano nella colonna A (come descritto in precedenza), puoi utilizzare la seguente macro per ordinare i dati in base al contenuto della colonna A:

Sub SortList()

Dim sAddStart As String     Dim rng As Range     Dim rng2 As Range     Dim lRows As Long

Application.ScreenUpdating = False     sAddStart = Selection.Address     Set rng = Range("A1").CurrentRegion

With rng         lRows = .Rows.Count - 1         .Cells(1).EntireColumn.Insert         .Cells(1).Offset(0, -1) = "Temp"

.Cells(1).Offset(1, -1).FormulaR1C1 = _           "=+RC[1]&"" ""&ROW()"

.Cells(1).Offset(2, -1).FormulaR1C1 = _           "=+R[-1]C[1]&"" ""&ROW()"

Set rng2 = .Cells(1).Offset(1, -1).Resize(lRows, 1)

Range(.Cells(2, 0), .Cells(3, 0)).AutoFill _             Destination:=rng2         rng2.Copy         rng2.PasteSpecial Paste:=xlValues

.Columns(1).MergeCells = False

.CurrentRegion.Sort _         Key1:=Range("A2"), Order1:=xlAscending, _         Header:=xlYes, OrderCustom:=1, _         MatchCase:=False, Orientation:=xlTopToBottom

rng2.EntireColumn.Delete

With Range(.Cells(2, 1), .Cells(3, 1))

.Merge             .Copy             .Cells(3, 1).Resize(lRows - 2, 1). _                 PasteSpecial Paste:=xlFormats         End With     End With     Application.CutCopyMode = False     Range(sAddStart).Select     Application.ScreenUpdating = True End Sub

La macro inserisce una colonna temporanea, legge gli elementi dalla prima colonna dell’elenco, aggiunge il numero di riga, lo copia nella colonna temporanea, separa le celle, ordina l’elenco, elimina la colonna temporanea e unisce nuovamente la colonna A. (È un sacco di lavoro solo per ordinare una tabella con celle unite!)

Questa macro è molto specifica per un particolare layout dei dati e quindi dovrebbe essere testata e probabilmente modificata per assicurarsi che funzioni con i dati formattati in qualsiasi altro modo.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (761) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia del menu precedente di Excel qui: