Saber el primer valor disponible en una columna

Mi pregunta sería: ¿Cómo puedo saber el primer valor disponible mediante macros?

Tengo una base de datos, y a cada empleado le asigno un número de ID (empleado). Si por ejemplo elimino algún empleado ese número de identificación queda libre. Mediante una macro se cual es el último (maximo) valor usado, ¿pero podría saber si existe algún número de indentificacion libre por medio?

1 Respuesta

Respuesta
1

Suponiendo que la BD está ordenada, entonces tenés 2 opciones:

1) Hacer un bucle que vaya recorriendo las celdas y compare contra la anterior. El problema que tiene este método es que si tenés muchos registros puede ser muy lento

2) Usar una columna auxiliar de la BD

a. Haces la cuenta de la celda actual contra la celda anterior (eso debería dar 1)

b. Filtras esta nueva columna lo que sea distinto de 1

Salu2

Gracias por la pronta respuesta.

El mayor problema que veo es que puedo llegar a 500 registros, además todo está en base a un userform del que inserto/edito/actualizo datos.Ademas estos valores después se pasan a otras hojas, entonces no se si al borrar algún registro después me afecta a esas otras hojas

El tema de como te afecta a otras hojas es cierto y te lo iba a comentar, pero se me pasó. Lo ideal es que no elimines el registro, sino que le hagas una marca de borrado o algo por el estilo (por lo que en la base te quedarían todos los empleados, tanto activos como inactivos.

Definitivamente creo que eso es lo mejor.

Salu2

¡Gracias! 

Eliminar puedo, porque se supone que ese empleado desaparece y no va a volver a usarse, el problema que como identifico que es número de empleado está libre, porque no quiero que todos los demás suban un puesto, solo quiero un mensaje que me diga el último valor (en mi caso lo reconoce como el máximo) pero también necesito que si queda un hueco me lo diga para no dejar números libres por medio

Eso es mi primer respuesta, suponiendo que tienes la lista

Id... Nombre

1... Juan

2... Pedro

4... José

Cuando estés haciendo la búsqueda el algoritmo cuando se posicione en el registro 4, va a ver que la diferencia con el anterior no es 1, por lo que está faltando un registro y el que falta es uno menos del actual (o sea el 3). También podrían pasar que falten más de 1, ¿pero no sé si es crítico que te asigne el más chico posible? (Si es así entonces el análisis lo deberías hacer entre el registro actual y el siguiente, en ese caso cuando esté en el 2 lo va a comparar con 4 y como la diferencia no es 1 también dice que falta el 3 (si José en lugar del id 4 tendría el 5, la comparación también le da que falta y le va a asignar el 3). Y cuando llegas al último registro la diferencia es negativa (porque la celda siguiente está en blanco) y el algoritmo termina

Igualmente creo que no es bueno que borres registros, está bien que el Id 3 no exista más, pero: ¿Nno tenés información histórica donde sí aparece? ¿Qué harías en esos casos?

Salu2

He conseguido en vez de “delete” el “ClearContent”.

Pero después necesitaría saber que ese número de ID está libre, para adjudicarlo a un nuevo empleado.

es la solución que se me ocurre, sino tendría que siempre dejar a todos los empleados.

no tengo histórico, es una base de datos que continuamente se actualiza.

es para un barco, entonces cada vez que viene un empleado nuevo lo insertó en la base de datos, pero imagina que un empleado no va a volver nunca , podría eliminarlo y aprovechar ese hueco para otro nuevo.

https://uc6d720c34cd0a80d3287ddf8011.dl.dropboxusercontent.com/cd/0/get/AmIv9WUXtTnBUoxPeRd9J1fr7wZC9RcWol5nsiVCRAWIX6tFVh8L4bl2otFxBNMHwVUxwprqBizdwC2I5mialhDxdwkMM3o2fqv1NUwAKja6ELAyXPbCMHPL0YN-aaZrAqc/file?dl=1 

Está bien, si podés reusar los números entonces podrías hacer lo que te digo yo de recorrer con una macro cada celda y comparar contra la de abajo, si la diferencia es de 1 está bien, si es negativa es porque terminó el proceso y si es distinto de 1 es porque tenés un número que podés usar para el nuevo empleado (tené en cuenta que la base siempre tiene que estar ordenada por el ID)

En este momento desde el trabajo no puedo abrir dropbox, pero decime si eso más o menos te orientó

Si me sirve, pero seguramente tendrás que orientarme.

de todas formas envíe el archivo para que veas el funcionamiento porque es un poco enrevesado 

Ok, ya por hoy no creo que vea nada, te pido que hagas una copia con 'pocos datos' como para que pueda "jugar" con el archivo (o puedes dejar ese, pero sabiendo que lo voy a estar modificando)

No te preocupes puedes usar ese archivo, yo siempre voy haciendo copias con los avances.

muchas gracias por la colaboración 

Creo que te viene mejor el archivo más actualizado. Este enlace es mejor.

https://www.dropbox.com/s/v3w0mh5695ddk2d/FRS.2.xlsm?dl=0 

Indica en el archivo cual sería la tabla, y pon algunos ejemplos porque veo que ese archivo tiene 3 hojas pero no estoy seguro donde quieres hacer lo que comentas. Incluso indica en que código sería el ajuste para ver específicamente eso...

Salu2

Perdón, los datos se guardan en la hoja "Nombre" (oculta). En la hoja "Data" tienes el formulario para insertar/modificar/buscar/eliminar los datos.

Todo funciona correctamente, lo que estamos hablando es de que cuando uso la función "Eliminar", no elimine toda la fila en la hoja "Nombre".

Intento explicarme con un ejemplo:

Cuando abres el formulario tienes varias opciones, en este caso pones un numero de pasaporte "Passport" y le das a "Search" (si quieres usa PAD567527), después pulsas arriba la opción "Delete" y te elimina todos los datos (fila) perteneciente a ese empleado.

Lo que busco es cuando elimine ese empleado deje el numero ID sin borrar para poder usarlo para otro empleado o si elimina toda la fila, cuando abra el formulario me de un valor de ID disponible (ahora mismo me da el ultimo LAST ID)

Ok perfecto! Siendo así creo que entonces la mejor solución es borrar los datos en lugar de eliminar (esto hará que sea mucho más rápido la búsqueda).

Igualmente yo lo que estoy haciendo para darte el id disponible es buscar en la columna A la celda "Available" (modifiqué la función de borrar, borro todos los datos y luego donde va el pasaporte dejo esa palabra, para saber que se puede usar esa fila.

Además de eso modifiqué la fórmula donde te traés el id disponible Celda N1 de la hoja Data.

El tema es que no puedo volver a enviarte el archivo. El link que me pasaste solo me deja descargar el archivo, pero no tengo forma de subirlo nuevamente con las modificaciones...

Salu2

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas