¿Se puede hacer una macro que al encontrar nombres o apellidos iguales?

Hola.Yo otra vez a ver si me puedes seguir ayudando. Esta vez mi consulta es que tengo una base de datos de una escuela, en donde la 1º columna están los Apellidos de los alumnos, 2º columna los nombres y en la 3º los documentos de identidad. Para realizar una búsqueda por apellido uso una fórmula de búsqueda y todo bien. Pero el problema se presenta cuando los apellidos se repiten.Se puede hacer una macro que al encontrar apellidos iguales, ¿la búsqueda se haga también con los nombres (que están en la 2º columna)?. Gracias
Respuesta
1
Creo que no es necesario programar una macro para esto, se puede resolver por fórmulas
Vamos a ver un ejemplo:
En la primera fila, columnas A, B y C ponemos los rótulos de las columnas (Apellidos, Nombre, DNI)
Rellenamos datos hasta la fila 11.
Las celdas de búsqueda serán la A13 y la B13 según necesitemos nombre y apellido.
La fórmula podemos ponerla por trozos:
1) Para comprobar si el apellido se repite utilizamos la función CONTAR. SI
=CONTAR.SI($A$2:$A$11;A13)
Nos devuelve el número de veces que se repite el apellido.
2) Con una función SI podemos usar una búsqueda sólo por apellido si la anterior es igual a 1 ó buscar por nombre y apellido si el resultado es mayor que 1.
=SI(CONTAR.SI($A$2:$A$11;A13)>1;buscar_apellido+nombre;buscar_apellido)
3) Buscar sólo por apellido sería así:
=BUSCARV(A13;A2:C11;3;FALSO)
4) Buscar por apellido y nombre requiere una fórmula matricial, por lo que después de escribirla hay que pulsar CNTRL+SHIFT+ENTER y aparecerá entre llaves:
=INDICE(C2:C6;COINCIDIR(A13&B13;A2:A6&B2:B6;0))
5)Todo esto se puede juntar en una megafórmula, siempre terminando con CNTRL+SHIFT+ENTER:
=SI(CONTAR.SI($A$2:$A$11;A13)>1;INDICE(C2:C11;COINCIDIR(A13&B13;A2:A6&B2:B11;0));BUSCARV(A13;A2:C11;3;FALSO))
¿La función COINCIDIR permite además hacer búsquedas empleando * ó? En lugar de poner todos los caracteres (en la ayuda de Excel hay más detalles) por lo que no sería necesario escribir el nombre completo en la búsqueda.
Bueno.
Hola. Ante todo gracias por tu respuesta.Te rogaría si me puedes enviar un ejemplo concreto, ya que aplicando la fórmula anidada final (matricial) me da como resultado final de la búsqueda #¡VALOR!. Mi mail es [email protected] Gracias
Creo que no estaba considerando todos los datos. Sería así:
=SI(CONTAR.SI($A$2:$A$11;A13)>1;INDICE(C2:C11;COINCIDIR(A13&B13;A2:A11&B2:B11;0));BUSCARV(A13;A2:C11;3;FALSO))
De todos modos te mando el ejemplo a tu correo.
Funciona muy bien. Pero antes de puntuarte quisiera hacerte un comentario.Al aplicar este método, ¿la búsqueda en la planilla se hace un poco más lenta.Es así?
Ok. Muchas Gracias
Seguramente se retrase un poco más que si únicamente buscas por apellido, pero depende del número de registros y del equipo que tengas.
Existe otra alternativa menos "elegante" que tal vez acelere la búsqueda. Para esto necesitarías crear una columna auxiliar que combinara los apellidos y el nombre.
En el ejemplo que ponía habría que insertar una columna en blanco al principio con esta fórmula en A2:
=B2&C2
Luego la copias hacia abajo. Ahora podrías utilizar nuevamente BUSCARV, algo así:
=BUSCARV(B13&C13;A2:D11;4;FALSO)
Y combinada con la otra quedaría:
=SI(CONTAR.SI($B$2:$B$11;B13)>1;BUSCARV(B13&C13;A2:D11;4;FALSO);BUSCARV(B13;B2:D11;3;FALSO))
Aquí ya depende si te interesa incluir esa columna auxiliar, pero creo que no deberías notar mucha diferencia.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas