Trasposizioni tridimensionali (Microsoft Excel)
In qualità di ex utilizzatore pesante della Lotus 1-2-3 in un lavoro precedente, Patti si è MOLTO attaccata a una funzionalità che manca gravemente in Excel: la capacità di trasporre i dati in tre dimensioni. La trasposizione bidimensionale è supportata in Excel, ma Patti non ha trovato un modo per prendere una riga, una colonna o una tabella e distribuirla attraverso una pila di fogli di lavoro. Questa era una funzione che veniva utilizzata quotidianamente da tutti nel suo ufficio finanziario e le manca davvero.
Patti ha ragione; non esiste una funzione incorporata per farlo in Excel. L’opzione più vicina consiste nell’usare una tabella pivot e le funzionalità “Mostra pagine” che include. In generale, segui questi passaggi:
-
Crea una tabella pivot dai tuoi dati come faresti normalmente.
-
Posizionare la colonna da cui si desidera creare fogli di lavoro nella sezione “Filtro report” della tabella pivot.
-
Visualizza la scheda Opzioni della barra multifunzione. (Questa scheda è visibile solo quando stai lavorando su una tabella pivot.)
-
Fare clic sulla freccia in giù accanto allo strumento Opzioni, nel gruppo Tabella pivot all’estremità sinistra della barra multifunzione.
-
Scegli Mostra pagine filtro rapporto. Excel ti chiede di confermare che desideri mostrare le pagine.
-
6 Fare clic su OK.
Quello che si finisce con è una serie di fogli di lavoro, uno per ogni voce nella colonna specificata nel passaggio 2. Ciascun foglio di lavoro contiene una “pagina” della tabella pivot.
Se questo non fa ancora quello che vuoi, dovrai ricorrere all’uso di una macro per trasporre i dati. Una tale macro può diventare piuttosto complessa, ma fondamentalmente tutto ciò che deve fare è scorrere la tabella dei dati e spostare ogni riga (o colonna) di dati nel proprio foglio di lavoro.
Ad esempio, la seguente macro (Transpose3D) prenderà ogni riga da un intervallo di celle selezionato e posizionerà quella riga sul proprio foglio di lavoro appena creato.
Sub Transpose3D() Dim rngTbl As Range Dim wsName As String Dim R As Integer Dim C As Integer Dim i As Integer Dim j As Integer Dim Killit As Integer Dim RCount As Integer Dim CCount As Integer Dim Table1() As Variant Dim Row1() As Variant RCount = Selection.Rows.Count CCount = Selection.Columns.Count If RCount < 2 Then MsgBox ("Error; Select a range with more than one row.") GoTo EndItAll End If wsName = ActiveSheet.Name R = ActiveCell.Row C = ActiveCell.Column Set rngTbl = Selection ReDim Table1(1 To RCount, 1 To CCount) ReDim Row1(1 To 1, 1 To CCount) Table1() = rngTbl.Value On Error GoTo Abend For i = 1 To RCount If SheetExists(wsName & "_Row_" & i) Then Killit = MsgBox("Sheet " & wsName & "_Row_" & i & _ " Already Exists!" & vbCrLf & _ " Cancel: Stop Transposition" & vbCrLf & _ " OK: Delete Sheet and Continue", vbOKCancel) If Killit = vbCancel Then GoTo EndItAll Application.DisplayAlerts = False Sheets(wsName & "_Row_" & i).Delete Application.DisplayAlerts = True End If Sheets.Add ActiveSheet.Name = wsName & "_Row_" & i Cells(R, C).Select For j = 1 To CCount Row1(1, j) = Table1(i, j) Next j Range(ActiveCell, ActiveCell.Offset(0, CCount - 1)) = Row1() Sheets(wsName).Select Next i GoTo EndItAll Abend: MsgBox ("Error in Routine Transpose3D.") EndItAll: Application.DisplayAlerts = True End Sub
Function SheetExists(SheetName As String) As Boolean Dim ws As Worksheet SheetExists = False For Each ws In ThisWorkbook.Worksheets If ws.Name = SheetName Then SheetExists = True Exit For End If Next ws End Function
_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 (11246) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: