Trucos Excel. Trasponer con la función indirecto

27 Feb

Una de las tareas más comunes en Excel es la de transponer filas. En ocasiones hemos de transformar columnas en filas o viceversa:

indirecto.JPG

Es muy habitual copiar y pegar transponiendo pero esta labor es muy manual cuando manejamos hojas con gran cantidad de fórmulas y que pueden generar informes automáticos. Para transponer contamos con la ayuda de la función INDIRECTO de exce. En la ayuda se define como:

«Devuelve la referencia especificada por una cadena de texto. Las referencias se evalúan de inmediato para presentar su contenido. Use INDIRECTO cuando desee cambiar la referencia a una celda en una fórmula sin cambiar la propia formula»

A mi particularmente me gusta esta función porque se evalúa con bastante rapidez y nos permite referenciar otra celda con un texto. Tenemos algunas funciones desarrolladas con código que hacen cosas similares (función PULL) pero al final es mejor emplear INDIRECTO por si se comparten documentos.

Para comenzar a conocer esta función partimos del ejemplo más sencillo, hacer referencia a la celda (1,1) o A1. Si por ejemplo escribimos INDIRECTO(«A1») nos referenciará la primera celda de la hoja. Del mismo modo INDIRECTO(«F1C1»;FALSO) nos referencia la primera celda de la hoja pero en forma «Fila Columna» para ello necesitamos el segundo parámetro de la función a FALSO. Estos son los dos modos de referenciar con INDIRECTO. Vemos que los parámetros son un texto y una variable booleana que por defecto toma el valor VERDADERO para referencias tipo A1. Con estas directrices el siguiente ejemplo realizará una trasposición de las celdas como indica la figura de arriba. LA referencia tipo F1C1 parece la más acecuada. La columna se mantendrá fija en C1 pero a la fila necesitaremos agregarle un índice. De forma que recorrer las filas sería INDIRECTO(«F1C1»;FALSO) – INDIRECTO(«F2C1»;FALSO) … – INDIRECTO(«FnC1»;FALSO) El índice tendría que ir de 1 a n y sería interesante crearlo de forma que podamos arrastrar la fórmula. ¿Cómo creamos ese índice? Recorriendo la propia columna y restando las unidades necesarias para hacer el índice. En este ejemplo sencillo sería: COLUNMA()-1 ya que empezamos en la segunda columna. Con ello la fórmula sería un texto del modo «FiC1»: INDIRECTO(«F»&COLUMNA()-1&»C1»;FALSO) la podemos arrastrar y nos realiza una trasposición perfecta.

Tened en cuenta para trasponer:

  • El rango que debemos recorrer para saber donde ubicar el índice
  • El comienzo de la trasposición para que el índice comience perfectamente

Espero que os sea de utilidad. Si tenéis dudas o sugerencias… rvaquerizo@analisisydecision.es

21 respuestas a «Trucos Excel. Trasponer con la función indirecto»

  1. gracias Braulio, es así de simple, o sea, copiar columnas y al pegar en la primera celda elegida, elegir «transponer», supongo que al revés ídem.
    gracias de nuevo :-)

  2. Perfecto! Llevaba tiempo buscando poder hacer esto. Sobre todo poder moverme por las columnas con una variable para poder ir de 1 a n.
    Ahora para rematar: cómo emplear esta misma función cogiendo los valores de una columna que se encuentra en otra hoja?

  3. Tan solo tienes que incluir entre las comillas donde se referencia la fila, el nombre de la hoja a la que te quieres referenciar, es decir:

    INDIRECTO(«Hoja2!F»&COLUMNA()-1&»C1»;FALSO)

  4. Muchísimas gracias. La información me ha sido de muchísma utilidad y de paso he aprendido esto del INDIRECTO que tiene pinta de solucionar muchos otros problemas :-)

  5. =CONSULTAV(A16,’C:\Users\JH\Documents\CAL2011enero\[ENERO2011.xls]2001′!A16:D126,3,0)

    TENGO HOJAS 2001, 2002, 2003, ETC.

    DE ESTA FORMULA QUIERO CONTROLAR CON UNA CELDA EL NOMBRE DE LAS HOJAS CON =INDIRECTO(), CAMBIANDO EL 2001, PERO NO HE PODIDO, EJEMPLO

    =CONSULTAV(A16,’C:\Users\JH\Documents\CAL2011enero\[ENERO2011.xls]INDIRECTO(E4)’!A16:D126,3,0)

    ¿COMO SERIA LA SINTAXIS?

    ¿ME PODRIAN AYUDAR?, MUCHISIMAS GRACIAS

  6. Un favor si tengo unos datos en una matriz 3×10
    es decir empezando en A1 rango A1:J3
    como hago para llevarla a una matriz columna de 30×1 es decir 30 filas por una colmna .
    Gracias

  7. Hola, me gustaría saber cómo seria el procedimiento para el caso contrario, es decir transponer una fila a columna si los datos se encuentran en otro libro, puesto que no me ha funcionado el código, muchas gracias

  8. En ese caso tienes que modificar la columna en la referencia FxCy:

    =INDIRECTO(«Hoja1!F12″&»C»& 2+FILA()-15;FALSO)

    En indirecto puedes cambiar también el nombre de la hoja

  9. solo un cuestion de versiones:
    al dejar la referencia a filas y columnas como «F» y «C» dentro del indirecto, esto es fijo…
    …¿que pasa si comparto esa hoja formulada con alguien que tenga el excel en otro idioma?
    Las formulas sé que no hay problema, pero aqui la «F» no sé si no cambiará a «R» por estar fija

  10. Muy práctico. muchas gracias.
    Yo lo apliqué para llevar de una hoja a otra y trasponer las filas a columnas, en la columna C tengo en que fila empieza dónde tengo que trasponer
    INDIRECTO(«Hoja1!F»&$C2+COLUMNA()-4&»C2»;FALSO)

  11. Hola, yo tengo un problema que no puedo solucionar, tengo una columna así.

    p1566
    q12
    l000256
    p1566
    q12
    l000256
    p1566
    q12
    etc.
    y necesito transponer o pasar en tres columnas de tres en tres, no se si se puede, quedaría algo así.
    p1566 q12 l000256
    p1566 q12 l000256

    Si se puede le agradecería una ayuda por favor, gracias.

  12. Pingback: DESREF para trasponer en Excel varias columnas | Análisis y Decisión

  13. Por favor su apoyo.

    Tengo una hojas en esta forma
    PTD 101 102 103
    Trabajador C.C 91 92 93 TOTAL

    A 4 4.5 8.5
    B 8.5 8.5
    C 5.5 3 8.5
    D 4 4.5 8.5

    Mediante formula deseo que se genere así.

    A 91 101 4.0
    A 93 103 4.5
    B 91 101 8.5
    C 91 101 5.5
    C 93 103 3.0
    D 91 101 4.0
    D 93 103 4.5

    Cada vez que agregue mas personal y labore en otras actividades se repetiran tantas veces las actividades.
    Por favor su apoyo.

Deja una respuesta

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