Tredimensionella transponeringar

November 29

Som före detta tunga Lotus 1-2-3 användare vid ett tidigare jobb, fick Patti mycket fäst vid en funktion som i högsta grad saknas i Excel: förmågan att införliva data i tre dimensioner. Tvådimensionell införlivande stöds i Excel, men Patti har inte listat ut ett sätt att ta en rad eller kolumn eller tabell och sprida det genom en bunt kalkylblad. Detta var en funktion som används dagligen av alla i hennes finans kontor, och hon verkligen missar det.

Patti är rätt; det finns ingen inbyggd funktion för att göra detta i Excel. Den närmaste alternativet är att använda en pivottabell och "Visa Sidor" kapacitet som ingår. I allmänhet följer dig här:

  1. Skapa en pivottabell från dina data som vanligt.
  2. Placera kolonnen från vilken du vill kalkylblad som skapats i avsnittet "Sidor" i pivottabellen.
  3. På pivottabellen verktygsfältet, klicka på Pivottabell alternativet vid vänster sida av verktygsfältet. Excel visas ett antal alternativ som du kan välja.
  4. Välj Visa Pages. Excel ber dig bekräfta att du vill visa sidorna.
  5. Klicka på OK.

Vad du sluta med är en serie av kalkylblad, en för varje post i kolumnen som du angav i steg 2. Dessa kalkylblad innehåller vardera en "sida" av pivottabellen.

Om detta fortfarande inte riktigt gör vad du vill, så måste du ta till hjälp av ett makro för att införliva data. En sådan makro kan bli ganska komplicerat, men i grunden allt den behöver göra är steg genom din databord och flytta varje rad (eller kolumn) av data till sin egen kalkylblad.

Som ett exempel, kommer följande makro (Transpose3D) tar varje rad från ett utvalt sortiment av celler och placera den raden på egen hand, nyskapade arbetsblad.

Sub Transpose3D ()
Dim rngTbl Såsom 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
Om RCount <2 Därefter
MsgBox ("Fel, Välj ett område med mer än en rad.")
GoTo EndItAll
End If

wsName = ActiveSheet.Name
R = ActiveCell.Row
C = ActiveCell.Column

Ställ rngTbl = Val
ReDim Table1 (1 Till RCount, 1 Till CCount)
ReDim ROW1 (1 till 1, 1 Till CCount)
Table1 () = rngTbl.Value

On Error GoTo Abend

För i = 1 Till RCount
Om SheetExists (wsName & "_Row_" & i) Därefter
Killit = MsgBox ("Sheet" & wsName & "_Row_" & i & _
"Finns redan!" & VbCrLf & _
"Avbryt: Stoppar Införlivande" & vbCrLf & _
"OK: Delete Sheet och fortsätt", vbOKCancel)
Om Killit = vbCancel Då GoTo EndItAll
Application.DisplayAlerts = False
Lakan (wsName & "_Row_" & i) .Delete
Application.DisplayAlerts = True
End If

Sheets.Add
ActiveSheet.Name = wsName & "_Row_" & jag
Celler (R, C) .Select
För j = 1 Till CCount
ROW1 (1, j) = Table1 (i, j)
Nästa j
Range (Active, ActiveCell.Offset (0, CCount - 1)) = ROW1 ()
Ark (wsName) .Select
Nästa jag
GoTo EndItAll

Abend:
MsgBox ("Fel i Rutin Transpose3D.")

EndItAll:
Application.DisplayAlerts = True
End Sub

Funktions SheetExists (SheetName As String) As Boolean
Dim ws As Blad
SheetExists = False
För varje ws I ThisWorkbook.Worksheets
Om ws.Name = SheetName Därefter
SheetExists = True
Exit For
End If
Nästa ws
End Function

ExcelTips är din källa för kostnadseffektiv Microsoft Excel utbildning. Detta tips (11245) gäller Microsoft Excel 97, 2000, 2002, och 2003. Du kan hitta en version av detta tips för menyfliksområdet i Excel (Excel 2007 och senare) här: Tredimensionell transpositioner.