Saltar al contenido

¿Cómo “unpivot” o “reverse pivot” en Excel?

Recuerda que en las ciencias informáticas un problema suele tener diversas resoluciones, no obstante aquí mostramos la mejor y más eficiente.

Solución:

Puedes hacer esto con una tabla dinámica.

  1. Cree una “tabla dinámica de rangos de consolidación múltiple”. (Solo en el asistente de tablas dinámicas. Llame con alternativa+D, PAGS en Excel 2007)
  2. Seleccione “Crearé mis propios campos de página”.
  3. Seleccione sus datos.
  4. Haga doble clic en el valor total general – el que está en la intersección de Gran Fila y Gran columnahasta el final en la esquina inferior derecha de su tabla dinámica.

Debería ver una nueva hoja que contiene todos los datos en su tabla dinámica, transpuestos de la manera que está buscando.

Las tecnologías Datapig proporcionan instrucciones paso a paso que en realidad son más complicadas de lo que necesita: su ejemplo transpone solo una parte del conjunto de datos y utiliza la técnica de pivote combinada con TextoAColumnas. Pero tiene muchas fotos.

Tenga en cuenta que una tabla dinámica agrupará los datos. Si desea desagruparlo, la única forma de hacerlo es copiar la tabla dinámica y “pegar especial” como valores. Luego puede completar los espacios en blanco con una técnica como esta: http://www.contextures.com/xlDataEntry02.html

Si sus datos no son una tabla dinámica de Excel, sino solo datos, es posible que desee “des-pivotarlos” con un código VBA simple. El código depende de dos rangos con nombre, Origen y Destino. El origen son los datos que desea descentrar (excluyendo los encabezados de columna/fila, por ejemplo, NY-RI en la muestra) y el destino es la primera celda donde desea colocar su resultado.

Sub unPivot()
Dim oTarget As Range
Dim oSource As Range
Dim oCell As Range

Set oSource = Names("Source").RefersToRange
Set oTarget = Names("Target").RefersToRange

For Each oCell In oSource
    If oCell.Value <> "" Then
        oTarget.Activate
      ' get the column header
        oTarget.Value = oCell.Offset(-(oCell.Row - oSource.Row + 1), 0).Text 
      ' get the row header
         oTarget.Offset(0, 1).Value = oCell.Offset(0, _
           -(oCell.Column - oSource.Column + 1)).Text 
      ' get the value
        oTarget.Offset(0, 2).Value = oCell.Text 
      ' move the target pointer to the next row
        Set oTarget = oTarget.Offset(1, 0) 
    End If
Next
Beep
End Sub

He creado un complemento que le permitirá hacer eso y que facilita la adaptación a diferentes situaciones. Compruébalo aquí: http://tduhameau.wordpress.com/2012/09/24/the-unpivot-add-in/

Aquí puedes ver las comentarios y valoraciones de los lectores

Recuerda algo, que puedes optar por la opción de valorar este enunciado si diste con la solución.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *