Extraer el valor de una celda que contiene varios números separados por un carácter especial y agrupar en una única columna

Llevo bastante tiempo dándole vueltas a esto que os voy a explicar a continuación y creo que yo solo no voy a ser capaz de resolverlo, por lo que acudo a vuestro sabio consejo:

La utilidad que preciso es la siguiente:

1) Separar los registros de la columna NUM, en los números que tiene, y que todos ellos vayan en una misma columna

2) He probado con la utilidad de la ficha DATOS, texto en columnas, pero así lo que consigo es ponerlo en una misma fila cada registro, y luego para pasarlos todos a una misma columna en común, tambien me atasco.

Lo que quiero que haga la utilidad es que me convierta la imagen anterior en:

2

2 respuestas

Respuesta
1

Se puede armar una macro... pero la solución es mucho mas sencilla... con PowerQuery.. una de las maravillas aun desconocidas del Excel...

Lo acabo de resolver... y es más veloz que una macro. Se actualiza poniendo el cursor sobre la tabla Verde y presionando Alt+F5 (actualizar consulta). Si hay que adaptarlo a su archivo, me lo envía y le cargo encima la consulta (ya está hecha). El único detalle es que debido a la forma de programar la consulta si tuve que asumir la cantidad máximo de datos que podría haber en cada celda; en el ejemplo se ven a los más 4, yo lo programé para un máximo de 500 (una exageración)... sería ideal poner un número más realista!

https://drive.google.com/open?id=0B9HlT_ob_dG2WjBtRFJPa1R2MkU 

Saludos,
Jaime

[email protected]

Estoy impresionado, no conocía power query  y me parece una herramienta valiosísima, muchas gracias por la respuesta¡¡

Respuesta
1

Esto es algo parecido a lo que buscas, la macro es realmente muy sencilla por fórmulas lo veo complicado hacerlo.

y este es el codigo que logra hacerlo

Sub SEPARAR_Y_COPIAR()
Set DATOS = Range("B3").CurrentRegion

With DATOS
Set DATOS = .Rows(2).Resize(.Rows.Count - 1)
For I = 1 To .Rows.Count
NUMERO = .Cells(I, .Columns.Count)
SEPARA = Split(NUMERO, "/")
If I = 1 Then Set RESULTADO = .Columns(.Columns.Count + 3).Resize(UBound(SEPARA) + 1, .Columns.Count)
If I > 1 Then Set RESULTADO = RESULTADO.Rows(RESULTADO.Rows.Count + 1).Resize(UBound(SEPARA) + 1, RESULTADO.Columns.Count)
For J = 0 To UBound(SEPARA)
RESULTADO.Rows(J + 1).Value = .Rows(I).Value
RESULTADO.Cells(J + 1, 5) = SEPARA(J)
Next J
Next I
End With

With RESULTADO
Set RESULTADO = .CurrentRegion
.Rows(0).Value = DATOS.Rows(0).Value
End With

End Sub

Muchas gracias,  una macro era la solución originaria que me había planteado, pero por mis escasos conocimientos en vba aún no era capaz de implementar la solución, gracias de nuevo¡

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas