¿Cómo "desconectar" o "invertir pivote" en Excel?


66

Tengo datos que se ven así:

Id | Loc1 | Loc2 | Loc3 | Loc4
---+------+------+------+-----
1  | NY   | CA   | TX   | IL
2  | WA   | OR   | NH   | RI

Y quiero convertirlo a esto:

Id | LocNum | Loc
---+--------+----
1  |   1    | NY
1  |   2    | CA
1  |   3    | TX
1  |   4    | IL
2  |   1    | WA
2  |   2    | OR
2  |   3    | NH
2  |   4    | RI

¿Cuál es la forma más fácil de hacer esto en Excel 2007?


Respuestas:


69

Puede hacer esto con una tabla dinámica.

  1. Cree una "Tabla dinámica de rangos de consolidación múltiple". (Solo en el Asistente para tablas dinámicas. Llamada con ALT+ D, Pen Excel 2007)
  2. Seleccione "Crearé mis propios campos de página".
  3. Selecciona tus datos.
  4. Haga doble clic en el valor total general, el que está en la intersección de Row Grand y Column Grand , hasta 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, transpuesta 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 TextToColumns . 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


Gracias por su respuesta, pero no estoy muy seguro de lo que está diciendo aquí. Para el ejemplo en mi pregunta, ¿qué usaría para las etiquetas de fila, etiquetas de columna, valores y filtro de informe?
devuxer

Si pongo Id en las etiquetas de fila y Loc1 a través de Loc4 en las etiquetas de columna, luego hago clic en la celda inferior derecha (la intersección de los totales generales), crea una nueva hoja con una tabla, pero no es lo que quiero. Básicamente es solo una copia de la tabla dinámica normal.
devuxer

Lo siento, dejé un dato crítico. La tabla dinámica debe ser una tabla dinámica de tipo "rango de consolidación múltiple", aunque en este caso no tiene nada que consolidar.
DaveParillo el

44
Ah, está bien, lo busqué en la ayuda y encontré una manera de obtener el viejo Asistente de tabla dinámica en Excel 2007 (debe presionar ALT + D + P). Ahora puedo seguir tus pasos, y parece funcionar. ¡Gracias por tu ayuda!
devuxer


7

Si sus datos no son una tabla dinámica de Excel sino solo datos, es posible que desee "desanclarlos" con algún código VBA simple. El código depende de dos rangos con nombre, Origen y Destino. El origen son los datos que desea desenrollar (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

1
Gracias por esto. Funciona como excepción y me hace ahorrar mucho tiempo.
tigrou

¡¡Gracias!! esto es solo magia! mucho mejor que jigiry-pokery con informes poco dinámicos que nunca funcionaron para mí
trailmax

1
Esto se ve muy bien, pero lo mejor que puedo decir es que solo funcionará para una tabla que solo tenga un encabezado de fila. Si la tabla en el ejemplo tuviera encabezados de varias filas, digamos que tenía un "Subid" además del campo Id, esto no funcionaría. ¿Hay alguna manera fácil de modificarlo para que funcione en esta situación?
Chris Stocking


4

Hay una solución bastante buena en Excel 2010, solo hay que jugar un poco con la tabla dinámica.

Cree una tabla dinámica a partir de sus datos con esta configuración:

  • sin subtotales, sin grandes totales
  • diseño del informe: forma tabular, repita todas las etiquetas de elementos
  • agregue todas las columnas que necesita, mantenga las columnas que desea transformar a la derecha
  • para cada columna que desea transformar: configuración de campo abierto - en la pestaña de diseño e impresión: seleccione "Mostrar etiquetas de elementos en forma de esquema" y marque ambas casillas debajo
  • copie su tabla a una ubicación separada (solo valores)
  • Si tiene celdas vacías en sus datos originales, filtre los valores vacíos en la columna de la derecha y elimine esas filas (¡no filtre en la tabla dinámica ya que no funcionará como necesita!)

1
Esta es sin duda la mejor respuesta si está en 2010 o más, y no es nada obvio en la interfaz. Gran descubrimiento, lamentablemente solo tengo un voto a favor.
jkf

3

Lo mejor que he encontrado hasta ahora es esto:

Id   LocNum  Loc
---------------------------------
1    1       =INDEX(Data,A6,B6)
1    2       =INDEX(Data,A7,B7)
1    3       =INDEX(Data,A8,B8)
1    4       =INDEX(Data,A9,B9)
2    1       =INDEX(Data,A10,B10)
2    2       =INDEX(Data,A11,B11)
2    3       =INDEX(Data,A12,B12)
2    4       =INDEX(Data,A13,B13)

Esto funciona, pero tengo que generar los Id y LocNum manualmente. Si hay una solución más automatizada (además de escribir una macro), hágamelo saber en una respuesta por separado.


2

Si las dimensiones de sus datos son como en la muestra provista en su pregunta, entonces el siguiente conjunto de fórmulas que usan OFFSET debería darle el resultado requerido:

Asumiendo

1 | NY | CA | TX | ILLINOIS

2 | WA | O | NH | Rhode Island

están en el rango A2: E3, luego ingrese

= DESPLAZAMIENTO ($ A $ 2, PISO ((ROW (A2) -ROW ($ A $ 2)) / 4,1), 0)

en F2, digamos, y

= MOD (ROW (A2) -ROW ($ A $ 2), 4) +1

en G2, digamos, y

= DESPLAZAMIENTO ($ B $ 2, PISO ((ROW (B2) -ROW ($ B $ 2)) / 4,1), MOD (ROW (A2) -ROW ($ A $ 2), 4))

en H2, digamos.

Luego copie estas fórmulas hasta donde sea necesario.

Esta es la solución de fórmula incorporada más sencilla, pura que se me ocurre.


1

Parece que ha obtenido la columna "loc" (evidenciada por su primera respuesta), y ahora necesita ayuda para obtener las otras dos columnas.

Su primera opción es simplemente escribir las primeras filas (por ejemplo, 12) en esas columnas y arrastrar hacia abajo; creo que Excel hace lo correcto en este caso (no tengo Excel en esta computadora para probarlo con seguridad).

Si eso no funciona, o si desea algo más programador, intente usar la función row (). Algo así como "= Floor (row () / 4)" para la columna ID y "= mod (row (), 4) +1" para la columna LocNum.



1

Aquí hay una buena herramienta para desconectar, normalizar una tabla dinámica.

Normalisieren von Pivot Tabellen

Espero que ayude.


1
¡Bienvenido a SuperUser! Si bien la herramienta a la que se vinculó ofrece una solución, esta publicación solo es útil mientras el enlace permanezca activo. Para asegurarse de que su publicación siga siendo útil en el futuro, edite su respuesta para incluir información adicional sobre el producto, incluida la forma de usarla para resolver el problema descrito en la pregunta. ¡Gracias!
Excellll

1

La respuesta de @DaveParillo es la mejor respuesta para una tabla de una sola pestaña. Quería agregar algunos extras aquí.

Para columnas múltiples antes de las columnas no dinámicas

Este método no funciona.

Youtube desconecta datos simples como la pregunta

Este es un video de YouTube que muestra cómo hacerlo de una manera simple. Me salteé la parte sobre agregar el atajo y usé el atajo @devuxer que está en la respuesta de DaveParillo.

https://www.youtube.com/watch?v=pUXJLzqlEPk


3
La esencia de su respuesta es un enlace a un video y el contenido no se describe. Si el enlace se rompe o no está disponible, su respuesta no tendrá valor. Incluya la información esencial en su respuesta y use el enlace solo para atribución y exploración adicional.
fijador1234

-2

Es mucho más simple que esto. Simplemente haga clic en la opción "Transponer" en "Pegado especial ..." para obtener la transposición que está solicitando.


1
Esto no funcionaria.
zx8754
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.