Transponer datos excel

Tengo una hoja electrónica así:
Cod         Documento           AAA            BBB              CCC              DDD                EEE
01 23456781 100 23.50 32.50 35.80 125.78
01 23984775 250 34.56 45.89 56.80 567.80
etc...
Y como puedo transponer los datos para obtener la hoja final así:
01 23456781 AAA 100
01 23456781 BBB 23.50
01 23456781 CCC 32.50
01 23456781 DDD 35.80
01 23456781 EEE 125.78
01 23984775 AAA 250
01 23984775 BBB 34.56
01 23984775 CCC 45.89
01 23984775 DDD 56.80
01 23984775 EEE 567.80
¿Alguien podría ayudarme con el procedimiento más sencillo para obtener la nueva hoja?
Gracias

1 Respuesta

Respuesta
1
Suponiendo que los datos estuvieran en una hoja llamada Datos, en el rango A1:G100, prueba pegando la siguiente fórmula en el rango A2:D2 de otra hoja (la fila 1 de dicha hoja se supone que sería la de títulos):
=INDICE(Datos!$A$1:$G$100;SI(COLUMNA()<>3;ENTERO((FILA()-2)/5)+2;1);SI(COLUMNA()<3;COLUMNA();RESIDUO(FILA()+3;5)+3))
Luego copia y pega la fórmula hacia abajo hasta que comiencen a aparecer ceros (lo que significará que ya no hay más datos que transponer)
Excelente respuesta, me ayudo bastante. Sin embargo lo que no entiendo porque ha variado el orden (de arriba para abajo) al incrementar más columnas a la hoja de datos claro que si coge la cabecera y su dato de la fila correctamente. ¿Me podría aclarar como hago para que también el orden en forma vertical se mantenga? Muchas gracias de antemano por la respuesta.
La fórmula estaba diseñada suponiendo que el rango de datos tenía 7 columnas, y si en realidad tiene más (o, para el caso, menos), no funcionará bien.
Para 8 columnas la fórmula sería:
=INDICE(Datos!$A$1:$H$100;SI(COLUMNA()<>3;ENTERO((FILA()-2)/6)+2;1);SI(COLUMNA()<3;COLUMNA();RESIDUO(FILA()-2;6)+3))
Sin saber exactamente el número de columnas del rango de datos no puedo ser más concreto. Es casi seguro que se podría escribir una fórmula que se amoldara al número de columnas, sea este el que fuera, pero habría que complicarla mucho y no creo que merezca la pena.
Gracias por el tiempo que demanda tu atención a mi consulta, pero creo valdría el esfuerzo si me ayudas con proporcionarme la fórmula de tal manera que me permita adaptar la fórmula al numero de columnas porque el sistema del que extraemos la hoja de datos cambia el numero de columnas de un reporte a otro y que básicamente se basa siempre a las dos primeras columnas (es decir código+documento) y que las demás columnas o se reducen i en otras se incrementan en su numero.
Y disculpa la molestia de complicarlo la fórmula. (Espero haber sido explicito en mi consulta)
Gracias
Pues lo siento pero no tengo tiempo para la fórmula, acabo antes escribiendo código para VBA:
Sub Transponer()
    Dim wksDatos As Worksheet, wksTrans As Worksheet
    Dim rngDatos As Range
    Dim lngFilaDatos As Long, lngFilaTrans As Long, intColumna As Integer
    Set wksDatos = ThisWorkbook.Worksheets("Datos")
    Set wksTrans = ThisWorkbook.Worksheets.Add
    wksTrans.Name = "Transposición"
    Set rngDatos = wksDatos.[A1].CurrentRegion
    lngFilaDatos = 2
    lngFilaTrans = 2
    Application.ScreenUpdating = False
    While rngDatos.Cells(lngFilaDatos, 1) <> ""
        For intColumna = 3 To rngDatos.Columns.Count
            With wksTrans
                .Cells(lngFilaTrans, 1).Value = rngDatos.Cells(lngFilaDatos, 1).Value
                .Cells(lngFilaTrans, 2).Value = rngDatos.Cells(lngFilaDatos, 2).Value
                .Cells(lngFilaTrans, 3).Value = rngDatos.Cells(1, intColumna).Value
                .Cells(lngFilaTrans, 4).Value = rngDatos.Cells(lngFilaDatos, intColumna).Value
                lngFilaTrans = lngFilaTrans + 1
            End With
        Next intColumna
        lngFilaDatos = lngFilaDatos + 1
    Wend
    Application.ScreenUpdating = True
    Set rngDatos = Nothing
    Set wksTrans = Nothing
    Set wksDatos = Nothing
End Sub
Tienen cuenta que:
- La hoja con los datos a transponer tiene que llamarse Datos
- Los datos tienen que comenzar en la celda A1 de la hoja Datos.
- El código tiene que estar en el mismo libro que dicha hoja
- Los datos serán transpuestos en una hoja nueva (en el mismo libro que la hoja Datos) que se llamará Transposición.
Muchas gracias por la ayuda, con su respuesta se me ha facilitado sustancialmente mi tiempo y mi trabajo. Excelente! Ayuda.
PD. Ojala talvez cuando Ud. tenga tiempo en adelante si me podria enviar via formula la misma solucion (porque cuando uno tiene la formula uno tiene mayor opcion para analizar y poder investigar acerca de las funciones que contienen)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas