Macro copiar literal a celda contigua a la buscada

Tengo dos celdas de toma de datos: A1 (puede contener números del 1 al 20) y B1 (contendrá palabras).
En la columna C, desde la fila 1 a la 20, tengo los números del 1 al 20. Es decir la C1 contiene el 1, la C2 el 2, y así hasta la C20 que contiene el 20.
Necesito una macro que me copie automáticamente la palabra que se introducza en la celda B1 en la celda de la derecha de la columna C que coincida con el número introducido en la celda A1.
Por ejemplo si A1 = 13 y B1 = "amigo", quiero que se busque 13 en la columna C (en este caso C13) y escriba "amigo" en la celda de la derecha de este (en este ejemplo en la D13)
Necesito que sea una macro para poder realizar esta operación cada vez que se introduzcan datos en las celdas A1 y B1.
Muchas gracias.

1 respuesta

Respuesta
1
Dado que coincide el numero de celda con el numero introducido donde poner los datos se simplifica bastante, aunque también seria sencillo si fueran por columnas más abajo.
El código, se podría poner en un botón, o en el evento change del worksheet o donde creas más adecuado.
if me.range("a1").value <> "" and me.range("b1").value <> "" and isnumeric(me.range("a1")) then
    me.range("d" & cint(me.range("a1").value)).value = me.range("b1").value
    me.range("a1", "b1").clear
    me.range("a1").select
end if
Gracias por tu respuesta duainsulch.
Me temo que con mi ejemplo he conseguido el efecto contrario a lo perseguido.
En la realidad, el número de celda no coincide con el número introducido. Por eso creo que es necesario realizar una búsqueda, ya que las celdas donde están los números al lado de las cuales hay que copiar el literal están divididos en dos columnas y ni siquiera están en filas consecutivas. Por intentar ilustrarlo, los números están repartidos en las columnas C y F y en la filas pares (2, 4, 6, 8, 10, 12, 14, 16, 18 y 20).
Siento haberte despistado con mi ejemplo.
Date cuenta del hecho de que si las celdas donde van a ir puestos los datos son siempre las mismas, es mejor no utilizar funciones for ni buscarv, ni cosas así, porque hacen muy lento el programa (para algo tan sencillo esta claro que no, pero para 10000 registros por ejemplo la cosa cambia, y hay que programar eficientemente también).
Para este caso, los datos están destinados a celdas en concreto, y sabemos cuales, así que si sabemos el lugar donde va el primer dato, y sabemos que las siguientes están siempre dos más abajo, solo hay que cambiar un poco la instrucción, pero se sigue solucionando en solo una linea de código:
me.range("F" & cint(me.range("a1").value) + 1).value = me.range("b1").value
En caso de que la primera fila no fuera la 2, por ejemplo y las filas empezaran en las 32, por ejemplo, y luego fueran saltando por filas pares, solo abría que sumar a esta instrucción + 32, al lado del +1 y ya esta.
Para utilizar un For, por ejemplo
for i = 2 (aqui el numero de la primera fila donde se van a introducir datos) to 26 (aqui el numero de la ultima fila donde habria q introducir datos)
    if me.range("C" & i).value = me.range("a1").value then
        me.range("F" & i).value = me.range("b1").value
        exit for
    end if
next

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas