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.
- 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)
- Seleccione “Crearé mis propios campos de página”.
- Seleccione sus datos.
- 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.