Suddivisione delle informazioni in righe (Microsoft Excel)
James ha alcuni dati in un foglio di lavoro contenuto in una serie di righe. Una delle colonne nei dati include celle con più righe per cella. (I dati nella cella sono stati separati in righe premendo Alt + Invio tra gli elementi.) James vorrebbe suddividere questi dati in più righe. Ad esempio, se ci fossero tre righe di dati in una singola cella nella riga, i dati in quella cella dovrebbero essere suddivisi in tre righe.
Excel offre un modo pratico per dividere i dati in colonne separate utilizzando lo strumento Testo in colonne. Questo può essere utilizzato per dividere i dati in base alla presenza del carattere ASCII 10, che è ciò che Excel inserisce quando si preme Alt + Invio. Il problema è che mentre questo divide correttamente i dati in colonne separate, non li ottiene in righe separate, come richiesto da James.
Ciò significa che la soluzione a questo problema deve includere l’uso di una macro. Un approccio è illustrato nel codice seguente. In questo esempio, la macro presume che tu voglia “espandere” tutto nel foglio di lavoro e che i dati nel foglio di lavoro inizino nella riga 1.
Sub CellSplitter1() Dim Temp As Variant Dim CText As String Dim J As Integer Dim K As Integer Dim L As Integer Dim iColumn As Integer Dim lNumCols As Long Dim lNumRows As Long iColumn = 4 Set wksSource = ActiveSheet Set wksNew = Worksheets.Add iTargetRow = 0 With wksSource lNumCols = .Range("IV1").End(xlToLeft).Column lNumRows = .Range("A65536").End(xlUp).Row For J = 1 To lNumRows CText = .Cells(J, iColumn).Value Temp = Split(CText, Chr(10)) For K = 0 To UBound(Temp) iTargetRow = iTargetRow + 1 For L = 1 to lNumCols If L <> iColumn Then wksNew.Cells(iTargetRow, L) _ = .Cells(J, L) Else wksNew.Cells(iTargetRow, L) _ = Temp(K) End If Next L Next K Next J End With End Sub
Nota che per eseguire la macro, dovrai specificare, utilizzando la variabile iColumn, la colonna che contiene le celle da dividere.
Come scritto qui, la macro divide le informazioni nella quarta colonna. Inoltre, le versioni separate delle celle vengono archiviate in un nuovo foglio di lavoro, in modo che il foglio di lavoro originale non sia affatto interessato.
La macro si basa sull’uso della funzione Split per separare le celle multilinea. Questa funzione è disponibile solo a partire da Excel 2000 e non è affatto disponibile in Excel per Mac. Inoltre, potresti voler eseguire la macro solo su una particolare selezione di celle. Per superare tutti questi potenziali problemi, ti consigliamo di considerare invece la seguente macro:
Sub CellSplitter2() Dim iSplitCol As Integer Dim iEnd As Integer Dim sTemp As String Dim iCount As Integer Dim i As Integer Dim wksNew As Worksheet Dim wksSource As Worksheet Dim lRow As Long Dim lRowNew As Long Dim lRows As Long Dim lRowOffset As Long Dim iTargetRows As Integer Dim iCol As Integer Dim iCols As Integer Dim iColOffset As Integer Dim AWF As WorksheetFunction On Error GoTo ErrRoutine Application.ScreenUpdating = False 'Set Column to split iSplitCol = 4 iCols = Selection.Columns.Count lRows = Selection.Rows.Count iColOffset = Selection.Column - 1 lRowOffset = Selection.Row - 1 lRowNew = lRowOffset Set wksSource = ActiveSheet Set wksNew = Worksheets.Add Set AWF = Application.WorksheetFunction With wksSource For lRow = (lRowOffset + 1) To (lRowOffset + lRows) sTemp = .Cells(lRow, iSplitCol) If Right(sTemp, 1) <> vbLf Then sTemp = sTemp & vbLf End If iCount = (Len(sTemp) - _ Len(AWF.Substitute(sTemp, vbLf, ""))) For iTargetRows = 1 To iCount lRowNew = lRowNew + 1 For i = (iColOffset + 1) To (iColOffset + iCols) If i <> iSplitCol Then wksNew.Cells(lRowNew, i) _ = .Cells(lRow, i) Else iEnd = InStr(sTemp, vbLf) wksNew.Cells(lRowNew, i) _ = Left(sTemp, iEnd - 1) sTemp = Mid(sTemp, iEnd + 1) End If Next i Next iTargetRows Next lRow End With ExitRoutine: Set wksSource = Nothing Set wksNew = Nothing Set AWF = Nothing Application.ScreenUpdating = True Exit Sub ErrRoutine: MsgBox Err.Description, vbExclamation Resume ExitRoutine End Sub
La macro si basa ancora sull’uso di una variabile per indicare la colonna da dividere. In questo caso, la variabile è iSplitCol ed è impostata sulla colonna 4. La macro funziona solo sulle celle selezionate quando viene eseguita per la prima volta e le celle divise vengono trasferite in un nuovo foglio di lavoro. L’indirizzo della cella in alto a sinistra nel nuovo foglio di lavoro è lo stesso della cella in alto a sinistra selezionata quando viene eseguita la macro.
_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 (3263) 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: