Trasposizioni tridimensionali (Microsoft Excel)
In qualità di ex utilizzatore pesante di 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 “Pagine” della tabella pivot.
-
Sulla barra degli strumenti tabella pivot fare clic sull’opzione tabella pivot sul lato sinistro della barra degli strumenti. Excel mostra una serie di opzioni che puoi scegliere.
-
Scegli Mostra pagine. Excel ti chiede di confermare che desideri mostrare le pagine.
-
Fare clic su OK.
Ciò che si ottiene è una serie di fogli di lavoro, uno per ogni voce della colonna specificata nel passaggio 2. Questi fogli di lavoro contengono ciascuno 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 selezionato di celle 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 (11245) si applica a Microsoft Excel 97, 2000, 2002 e 2003.
Puoi trovare una versione di questo suggerimento per l’interfaccia a barra multifunzione di Excel (Excel 2007 e versioni successive) qui: