Ordinamento dei dati contenenti celle unite (Microsoft Excel)
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 conferire 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 riunisce 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 (2581) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: