Transponer una columna a varias filas y columnas.

3 envíos / 0 nuevos
Último envío
mateogollum
Imagen de mateogollum
Offline
última acción: Hace 6 años 8 meses
alta: 01/08/2017 - 08:14
Puntos: 25
Transponer una columna a varias filas y columnas.

Buenos días,

Antes de empezar quiero agradeceros la ayuda que prestáis y la que me pretéis.

Estoy empezando en el mundo de las macros para excel y de momento soy un tanto nulo, a ver si con el tiempo soy yo el que os da soluciones.

Os cuento mi problema y la solución que necesito.

Me han pasado un excel con el siguiente formato.

Expediente1

cliente1

dni1

Expediente2

Cliente2

dni2

cliente3

dni3

expediente3

cliente4

dni4

cliente5

dni5

cliente6

dni6

cliente7

dni7

y necesito que quede de la siguiente manera.

expediente1 cliente1 dni1

expediente2 cliente2 dni2 cliente3 dni3

expediente3 cliente4 dni4 cliente5 dni5 cliente6 dni6 cliente7 dni7.

Sé que se puede hacer copiando y pegando de forma traspuesta, pero para 3 expedientes vale, pero es que tengo 2000 expedientes y me puedo morir. Por otro lado, he probado con una pequeña macro que he grabado, pero no me sirve, ya que si lo grabo, por ejemplo por el primer expediente, sólo me lo realiza con el primer expediente.

también he probado mediente fórmula, pero al extenderla desde elprimer expediente para usarla con el resto, sólo me mantiene el primer cliente que hay en ese expediente (porque en lel primer expediente sólo hay 3 campos, pero en el segundo hay 5 y en el tercero 9)

No se muy bien si me he explicado.

Espero que me podáis ayudar. un saludo.

Etiquetas: 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 3 semanas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Claro Es que la macro que

Claro

 

Es que la macro que grabas te sirve para saber qué tienes que hacer, pero únicamente repetirá lo que grabaste.

Te sugiero lo siguiente:

Recorre con un bucle toda la vertical, localizando las filas cuyos datos empiecen por "expediente". Los datos a transponer son los que están entre dos celdas localizadas.

Puedes llevar dos contadores, de manera que uno te cuente la fila donde debes introducir el dato y el otro la columna. Podría quedar algo así como:

Sub trasponer()

Dim para As Byte

Dim f As Long

Dim fila As Long

Dim col As Long

Dim primero As Boolean

 

f = 1

fila = 1

col = 1

primero = True

para = 0

 

Do While para < 2   'con "para" cuento celdas en blanco. Sale del bucle al encontrar dos seguidas

    If UCase(Left(Cells(f, 1).Value, 10)) = "EXPEDIENTE" Then

        If primero Then

            primero = False

        Else

            fila = fila + 1

            col = 1

        End If

    End If

    If Cells(f, 1).Value <> "" Then

        Sheets("hoja2").Cells(fila, col).Value = Sheets("hoja1").Cells(f, 1).Value

        para = 0

        col = col + 1

    Else

        para = para + 1

    End If

    f = f + 1

Loop

 

End Sub

 

 

 

jorge (no verificado)
Imagen de jorge
Funciona perfecto, sugerencia/pregunta

Estaría más completa si VB pidiera el valor del "delimitador" el cual se guardaría en una variable.

En tu ejemplo el "delimitador" es "EXPEDIENTE". 

Yo no lo sé hacer sin googlear

Te paso "documentación" q le agregué a la Macro por si te (les) sirve para ahorrar tipeo:

'Para transponer en base a una celda delimitadora

'Reemplazar ANTES de usar, en Do While con el valor q delimita cada cambio de fila desado

 

'Datos deben estar en "Hoja1" y debe existir "Hoja2"

Y finalmente MUCHISIMAS GRACIAS!!!