Ayuda expertos es un reto que me venció

Por favor necesito una macro para que haga lo siguiente:
En la columna
A B
1 rodo;carlos;javier
en columna A1=1
en columna B1= rodo;carlos;javier
Lo que necesito que se genere es lo sigue:
A B
1 1 rodo
2 1 carlos
3 1 javier
Es decir que genere las filas con esos valores, en realidad tengo 10097 registros con ese formato y quiero que se generre así.
para ser más claro la columna A y B siguiente esta:
A B
2 343;333;777;9999
en columna A2=2
en columna B2= 343;333;777;9999
lo que necesito que se genere es lo sigue:
A B
4 2 343
5 2 333
6 2 777
7 2 9999
Por favor en verdad estuve tratando todo un mes y me doy cuenta que me venció, por favor ayuda.

1 Respuesta

Respuesta
1
Los datos están separados por ; por que no utilizas la utilidad "Texto en columnas" ubicada en pestaña datos, allí utilizas delimitador ; y te queda cada dato en una columna independiente, luego es solo tomar cada dato y cancatenarlo con el valor de col A
Ahora si los quieres uno en cada fila. Una vez concatenados, tomas toda la fila copias y utilizas pegado especial transponer y te quedan de la forma que deseas
Hola muchas gracias por responder y si tienes razón es una buena solución, pero e mi caso son 10097 filas a modificar, así que por eso necesito la macro para que se genere de forma automática, supongamos que tengo esto:
A B
1 2;4;5
2 12;14;1
3 5;5;7
4 23
Etc. Hasta 10097
Lo que tendría que generar la macro es lo siguiente
A B
1 2
1 4
1 5
2 12
2 14
2 1
3 5
3 5
3 7
4 23
Etc. Te agradecería mucho experto que puedas generar una macro para que ese resultado se de, ayúdanos por favor.
En un libro nuevo, desde el editor de visual basic ALT+F11 inserta un modulo, ( NO modulo de clase, solo un modulo), una vez insertado el modulo, dale doble click y en la ventana de edición pegas esto:
Sub distribuir()
Application.ScreenUpdating = False
separar
concatenar
copiar
Application.ScreenUpdating = True
MsgBox "Terminado", vbInformation
End Sub
Sub separar()
Columns("B:B").Select
Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:=";", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
TrailingMinusNumbers:=True
Range("B2").Select
End Sub
Sub concatenar()
Dim r As Range
Dim t As Long
t = Application.WorksheetFunction.CountA(Range("B:B")) + 1
If t = 0 Then Exit Sub
For Each r In Range("B2" & ":" & "E" & t)
If Len(r) > 0 Then r = Range("A" & r.Row) & " " & r
Next
Set r = Nothing
End Sub
Sub copiar()
Dim i As Long
Dim r As Range
Dim t As Long
t = Application.WorksheetFunction.CountA(Sheets(1).Range("B:B")) + 1
For Each r In Range("B2" & ":" & "B" & t)
i = Application.WorksheetFunction.CountA(Sheets(2).Range("B:B"))
r.Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Sheets("Hoja2").Select
Range("B" & i + 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("Hoja1").Select
Next
Application.CutCopyMode = False
Set r = Nothing
Grabas el libro y cierras el editor. Y ya tienes tu macro ( en realidad son 3)
Una para cada cosa y se pueden correr en forma independiente. Pero para tu ejemplo debes llamar siempre el macro "distribuir". Ese es el que llama a todos los otros.
esto funciona si seguimos tu modelo de datos, es decir si en col A estan los numeros y en B las cadenas de texto separadas por ;. Lo que hace el macro es justamente replicar el proceso manual pero para cada una de las filas.
Los resultados sera puestos en la hoja 2
Ahora bien, debes modificar el rango del macro "concatenar", pues según tu modelo de datos la sepracion de las cadenas abarcaría solo hasta la col E, así que si tus datos abaracaran a más de col E solo pon la referencia que corresponda
Bien. Eso es todo no olvides CERRAR la pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas