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.
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
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!!!