Macro similar a la función BUSCARV

Hola Experto:
Antes que nada te saludo y te agradezco que te tomes la molestia en leer mi pregunta, te escribo para pedir tu valiosa ayuda en lo siguiente:
Tengo una matriz similar a esto:
Columna A Columna B
No. Contrato Cliente
5686 Juan Perez
5687 Jorge López
5688 Luis Gonzalez
5689 Juan Perez
Entonces lo que quiero es cargar la matriz en el cuerpo de la macro (para no tener que ponerla en otra parte del archivo) y que cuando tenga los números de contrato en una columna al ejecutar la macro me ponga los nombres de los clientes en la celda de la derecha, algo similar a lo que hace la función BUSCARV, pero te repito lo que quiero es que la matriz sea cargada en el cuerpo de la macro, y cuando no encuentre un valor (puesto que no estaría definido en la matriz) simplemente deje la celda en blanco. Y así continúe hasta recorrer todo el rango de la columna con los números de contrato, creo que tal vez aquí aplicaría usar un array pero lamentablemente no sé cómo se usan, quise hacerlo definiendo al número de contrato como variable, pero no me lo acepta VBA porque es número y me marca error, es por eso que recurro a ti ¿podrías ayudarme por favor?
De antemano agradezco infinitamente tu atención y quedo en espera de tu amable respuesta.

1 Respuesta

Respuesta
1
No te entiendo lo que quieres hacer, ni tampoco tu expresión " lo que quiero es que la matriz sea cargada en el cuerpo de la macro...". Dime que función quieres que haga la macro, y la forma de ingresar los valores, si tienes todos los números de contrato consecutivos y vas poniendo los nombres en Col B. Que pretendes que haga la macro, si es si repites el numero de contrato que te ponga el nombre en Col B y si no que te lo deje en blanco.
Aclarame mis dudas.
>Un saludo
>Julio
Hola:
Antes que nada muchas gracias por contestar a mi pregunta y trataré de ser lo más explicito posible para que me entiendas:
Mira cuando usas la función BUSCARV la matriz que va a servir de base de datos debes de tenerla en alguna otra hoja o en la hoja misma pero ordenada de acuerdo al valor que andas buscando y al valor que quieres que te regrese, por ejemplo vamos a suponer que yo en la "hoja 1" tengo la base de datos (o matriz).
Columna A Columna B
No. Contrato Cliente
5686 Juan Perez
5687 Jorge López
5688 Luis Gonzalez
5689 Juan Perez
Y en la hoja 2 uso la función BUSCARV, vamos a suponer que en la columna A, rango "A2:A100" yo tengo solo el número de contrato y que con la fórmula BUSCARV voy a obtener el nombre del cliente, los números de contrato son únicos e irrepetibles y van en orden consecutivo de menor a mayor pero el nombre de los clientes si se repite ya que un cliente puede tener 1 ó más contratos. Pues bien, lo que yo necesito es crear una macro que me haga lo mismo que la función BUSCARV, es decir, que recorra el rango "A1:A100" de la hoja 2 y que a la derecha de cada celda (en la columna B) me vaya poniendo los nombres de los clientes que les corresponde el número de contrato, y si no lo encuentra deje la celda de la columna B en blanco y así hasta terminar todo el rango, pero con la diferencia que la base de datos fuente no la quiero tener en otra hoja sino que esté escrita en el código de la macro, para no tener que estar metiendo esa basesita de datos en cada archivo donde la utilice yo o estarlo vinculando al archivo donde tenga yo la base. La base de datos no es muy grande son 2 columnas y aprox. unas 30 filas.
Espero que ahora si me haya explicado mejor y si no dame tu correo y te mando el archivo con ejemplos para que te quede más claro. Nuevamente agradezco tu atención y quedo a tus ordenes para cualquier comentario al respecto.
Vale entendido, lo que no logro entender es lo de tener la matriz en el cuerpo de la macro, cada macro se crea específicamente para una función, si tu rango donde buscar no le importa a la macro te servirá donde la pongas con pequeñas modificaciones dependiendo de pequeñas condiciones, en fin esta macro hace lo siguiente:
1º Se sitúa en tu hoja2 celda A1 recoge el valor de la celda en una variable, se irá a la hoja1 celda A1 y comenzará a buscar (en este caso tan sencillo hasta que encuentre una celda en blanco) así el rango puedes variarlo a tu gusto + o - cuando encuentra el valor copia el valor de la celda contigua y vuelve a la hoja2 y en la celda contigua lo pega, baja una fila en A y sigue comparando valores y los trae a la hoja2 si no existe el valor deja B de hoja2 en blanco y sigue bajando comprobando valores hasta que llegue a una celda en blanco en A de hoja2 y terminará la macro, debes de ponerla en un modulo y ejecutarla desde atajo de teclado o desde VBA, si quieres ponerla en un botón debes de unirla con un Call:
Sub Comprobar()
Dim valor As String
Sheets("Hoja2").Select
Range("A1").Select
Do While ActiveCell.Value<>""
valor=ActiveCell.Value
Sheets("Hoja1").Select
Range("A1").Select
Do While ActiveCell.Value<>""
If ActiveCell.Value=valor Then
ActiveCell.Offset(0,1).Copy
Sheets("Hoja2").Select
ActiveCell.Offset(0,1).PasteSpecial
Else
ActiveCell.Offset(1,0).Select
End If
Loop
Sheets("Hoja2").Select
ActiveCell.Offset(1,0).Select
Loop
End Sub
Con esta macro lo tienes hecho.
>Un saludo
>Julio
PD: A ti no hace falta que te diga que si te ha servido debes de puntuar y finalizar la consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas