Macro para copiar datos

Buenas tardes experto:
Quería resolver mediante macros lo siguiente:
1. En la columna A; listaré una serie de códigos alfanuméricos por ejemplo: "0131 A06BAJ 53705", "0161 A09INT 53742", etc. Ingresaré unos cuantos; por ejemplo si ingreso 3 códigos (ubicados en A1:A3), inmediatamente en la celda A4 digitaré un nombre (ejemplo, pedro, carlos, rafa, etc).
Luego de escribir el nombre en la celda A4, el nombre desaparece de la celda A4 y se copia en las celdas B1:B3 automáticamente después de dar enter.
Luego seguiré ingresando más códigos alfanuméricos por ejemplo de la celda A4:A7, luego en la celda A8 ingreso un nombre, automáticamente luego de dar enter el nombre desaparece y se copia en las celdas B4:B7... Y así sucesivamente.
0161 A09INT 53742 PEDRO
0164 A09INT 53452 PEDRO
0178 A09INT 53561 PEDRO
Pedro
0131 A09INT 52342 JUAN
0144 A09INT 51112 JUAN
0115 A09INT 56564 JUAN
0115 A09INT 52323 JUAN
JUAN
Muchas gracias,
Guillermo

1 Respuesta

Respuesta
1
Dejame que estudie la macro, las condiciones son muy estrictas y a lo mejor no sé hacerla, de todas formas veo que el nombre según tu ejemplo se mantiene en la Col B como 4 linea, pero no es eso lo que pones al hacer referencia a las celdas, corrige una cosa u otra y de paso me das tiempo para pensarla.
Aclarame si quieres el código concatenado con el nombre y como 4 fila el nombre solo o solo sin nombre.
>Un saludo
>Julio
Hola Julio:
Desde ya muchas gracias por tu respuesta, trataré de aclarar mejor el problemilla.
1. Si fuera una tienda y vendería arroz, azúcar, leche, sal, lenteja, garbanzos, limones, naranjas, etc. lo que quiero hacer es lo siguiente: si un cliente llamado Juan me pide arroz y azúcar, entonces en la celda A1 escribo "arroz" y en la celda A2 "azucar", y en la celda A3 escribo Juan (el nombre de mi cliente, que podría ser cualquier otro nombre).
2. Aquí viene el problema, desearía que el nombre Juan se colocara en la celda B1 y B2, osea al lado del producto que compra. Pero luego de escribir "Juan", desaparezca de la celda A3.
3. Seguimos, viene al azar otro cliente llamado Pedro, este al azar decide comprar leche, lentejas y garbanzos. Entonces ingreso en la celda A3 (ahora vacía) la "leche", en la celda A4 las lentejas y en la celda A5 los garbanzos; por último en la celda A6 escribo el nombre del cliente, en este caso Pedro; inmediatamente luego de dar enter a Pedro suceden 2 cosas, el nombre Pedro desaparece de la celda A6 y se copian en la celda B3, B4 y B5 respectivamente, es decir al lado del producto que este cliente ha comprado.
4. El ejemplo es así sucesivamente, quisiera que en la columna B se copie el nombre del cliente que ha comprado sus productos; yo ingresaré manualmente los productos y el nombre de cada cliente. Los clientes así como los productos son aleatorios.
5. Esto ha sido un poco didáctico, espero que me haya dejado entender; en realidad el producto leche, arroz, sal garbanzos,, no existe, lo que existe son códigos alfanuméricos de este tipo "0164 A09INT 53452" como te escribí en el mensaje anterior.
6. Pondré una cantidad "x" de códigos, luego un nombre, y cuando ingrese el nombre entonces se debe de activar la macro y copiar el nombre al lado de sus códigos en la columna B.
7. Los códigos tienen siempre esta estructura 0164 A09INT 53452 (4 números, espacio, 3 números concatenado a 3 letras, espacio y 5 números) los nombres siempre "son letras" y esta diferencia es lo que hará activar la macro; una vez que la macro detecte en una celda que le estamos ingresando un nombre, entonces se debe de activar, desaparecer el nombre de la columna A y copiarse en la columna B al lado de todos sus códigos.
Muchas gracias,,,
Guillermo
Tu siempre con inventos casi imposibles... y esta vez casi lo consigues porque de cabeza me estaba resultando complicado hacer esta macro, pero al fin salió, te sitúas en VBA en la hoja donde la vayas a ejecutar y la pegas:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim text, celda, numero As String
If Target.Value = "" Then
Exit Sub
End If
If Target.Column = 1 Then
texto = Target.text
numero = Left(texto, 1)
celda = Target.Address
If numero <> "0" And numero <> "1" And numero <> "2" And numero <> "3" And numero <> "4" _
And numero <> "5" And numero <> "6" And numero <> "7" And numero <> "8" And numero <> "9" Then
Range("B1").Select
If ActiveCell.Value <> "" Then
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Loop
End If
Do While ActiveCell.Offset(0, -1).Address <> celda
ActiveCell.Value = ActiveCell.Offset(0, -1).Value & " " & Target.Value
ActiveCell.Offset(1, 0).Select
Loop
Range(celda).Select
ActiveCell.Value = ""
End If
End If
End Sub
Como la cadena que introduces siempre comienza por un numero solo compruebo el primer carácter, porque luego el nombre evidentemente no empezará por un numero.
Pruebalá y me cuentas.
>Un saludo
>Julio
Hola Julio:
Desde ya Ud. es una leyenda de las macros,,, un algoritmo corto, bien estructurado, bien pensado.
Quería únicamente comentarle si es posible que sólo aparezca los nombres en la columna B, de momento aparece el código y el nombre juntos en la columna B. Si se complica lo dejamos así, igual podemos extraer el nombre en la columna C.
Desde ya totalmente contento y satisfecho con su ayuda, una gran solución.
Un saludo,
Guillermo
Me equivoco tu ejemplo pensé que lo que querías en la Col B era el código concatenado con el nombre, pero bien la macro quedaría así, tampoco era ten difícil si la analizas compruebas que el valor que llevaba era el código y el nombre, ahora solo el nombre:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim text, celda, numero As String
If Target.Value = "" Then
Exit Sub
End If
If Target.Column = 1 Then
texto = Target.text
numero = Left(texto, 1)
celda = Target.Address
If numero <> "0" And numero <> "1" And numero <> "2" And numero <> "3" And numero <> "4" _
And numero <> "5" And numero <> "6" And numero <> "7" And numero <> "8" And numero <> "9" Then
Range("B1").Select
If ActiveCell.Value <> "" Then
End If
Do While ActiveCell.Offset(0, -1).Address <> celda
ActiveCell.Value = Target.Value
ActiveCell.Offset(1, 0).Select
Loop
Range(celda).Select
ActiveCell.Value = ""
End If
End If
End Sub
Ya puedes finalizarla.
>Un saludo
>Julio
Hola Julio...
Quise ver si encontraba unas 10 estrellas para finalizar tu ayuda, pero como no encontré más, pongo las 5 estrellas que me parecen poco.
Un gran saludo, gracias por ayudar a la gente,,, aprendemos mucho de personas altruistas y generosas como tú.
Un saludo,
hasta pronto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas