Traducir el blog

Buscar rápida y eficazmente en Excel

🔝Select the language of this blog post in the Google box at the top left.


En el artículo anterior regalé una plantilla para celebrar que este blog ha superado el millón de visitas, ¡que contento estoy!, que puedes descargar en este enlace:

¡¡¡ Un millón de visitas conseguidas !!!


En este artículo explicaré cómo generar un millón de filas ordenadas, con una macro VBA, y cómo buscar rápida y eficazmente en el millón de filas, usando las funciones: BUSCARV y BUSCARX.


Esta imagen representa cuántas veces es más rápida una búsqueda con doble BUSCARV, sobre datos ordenados, en comparación con la búsqueda estándar con una función BUSCARV, sobre datos desordenados, dependiendo del número de filas en las que buscar.

Según esa gráfica la búsqueda eficiente es 3.600 veces más rápida para un millón de filas. Una búsqueda lenta, que tarda 6 minutos en encontrar un valor, se puede convertir en una búsqueda rápida, que tarda una décima de segundo en buscar lo mismo. La imagen anterior la he copiado del primer enlace de más abajo.

Las funciones BUSCARV y BUSCARX se traducen al inglés como VLOOKUP y XLOOKUP, respectivamente.


Búsqueda de antecedentes

Para informarme de qué fórmulas y funciones son más rápidas y eficaces he leído muchos artículos como los siguientes:

dailydoseofexcel.com - How Much Faster Is The Double-VLOOKUP Trick?

dailydoseofexcel.com - VLOOKUP: V Is For Volatile

fastexcel - Developing Faster Lookups – Part 1 - Using Excel’s functions efficiently

fastexcel - Developing Faster Lookups – Part 2 – How to build a faster VBA Lookup

MrExcel.com YouTube - Faster VLOOKUP - Podcast 2031

professor-excel.com - Performance of XLOOKUP: How fast is the new XLOOKUP vs. VLOOKUP?

blogs.itpro.es - Doble BUSCARV calcula más rápido en Excel

elsabiodeexcel - Cómo hacer que BUSCARV vaya más rápido

En estos artículos se explica por qué es más rápida la búsqueda aproximada sobre datos ordenados que la búsqueda exacta sobre datos ordenados o desordenados.


Tipos de búsquedas en Excel

Todas las versiones de Excel incorporan la función BUSCARV, que ha mejorado en prestaciones y funcionalidad con la función BUSCARX de las versiones recientes de Excel para Microsoft 365, Excel Web, Excel Android, etc. 

A) Búsqueda exacta con la función BUSCARV:

=BUSCARV(Rango_Valor;Rango_DATOS;2;FALSO)

Busca exactamente (argumento 4º a FALSO) el valor del argumento 1º en la primera columna de la matriz de datos (no hace falta que esté ordenada) del argumento 2º y devuelve el valor de la columna del argumento 3º en la matriz de datos. 

Es la búsqueda más usual y extendida pero nada rápida y eficiente para buscar entre miles de filas.

B) Búsqueda aproximada con doble BUSCARV sobre datos ordenados.

=SI(BUSCARV(Rango_Valor;Rango_DATOS_A;1;VERDADERO)=Rango_Valor; 

BUSCARV(Rango_Valor;Rango_DATOS;2;VERDADERO);NOD())

El argumento 4º a VERDADERO hace que la búsqueda sea aproximada y mucho más rápida que la búsqueda exacta, que tiene que comprobar cada fila. La búsqueda aproximada funciona sólo si los datos donde buscar están ordenados.

Con la primera búsqueda aproximada con BUSCARV se comprueba si se encuentra el valor buscado, en caso afirmativo hace una segunda búsqueda que devuelve el valor buscado, en caso negativo devuelve el error #N/D (No Disponible) con la función NOD().

C) Búsqueda exacta con la función BUSCARX

=BUSCARX(Rango_Valor;Rango_DATOS_A;Rango_DATOS_B)

Esta es la forma sencilla de llamar a esta función. El argumento 1º es el valor a buscar, el argumento 2º es la columna donde buscar (matriz buscada) y el argumento 3º es la columna donde está el valor a devolver (matriz devuelta).

Como no se han especificado mas argumentos, por defecto el modo de coincidencia (argumento 5º) es de coincidencia exacta, y el modo de búsqueda (argumento 6º) es empezando por el primer elemento.

Los tiempos de búsqueda exacta son lentos tanto con la función BUSCARV como con BUSCARX.

D) Búsqueda binaria con la función BUSCARX sobre datos ordenados

=BUSCARX(Rango_Valor;Rango_DATOS_A;Rango_DATOS_B;;;2)

El argumento 1º es el valor a buscar, el argumento 2º es la columna donde buscar (matriz buscada) y el argumento 3º es la columna donde está el valor a devolver (matriz devuelta).

Como no se especifica el argumento 5º, la búsqueda sigue siendo con coincidencia exacta, pero el argumento 6º es un 2, lo que indica que el modo de búsqueda es binario con la matriz buscada ordenada en orden ascendente.

La búsqueda binaria es muy rápida y ya no hace falta llamar dos veces a la función, como en el caso de BUSCARV, porque BUSCARX tiene el argumento 5º para definir una búsqueda con coincidencia exacta. Internamente hace una búsqueda binaria exacta extremadamente rápida y eficaz. 

Si tienes Excel 365 o Excel Web o Excel Android, acostúmbrate a usar esta función BUSCARX con estos argumentos:

=BUSCARX(valor_buscado; matriz_buscada; matriz_devuelta; [si_no_se_encuentra]; [modo_de_coincidencia]; [modo_de_búsqueda])

Siendo [modo_de_búsqueda] el último argumento con valor:

2: para realizar una búsqueda binaria que se base en que matriz_buscada se ordene en orden ascendente.

-2: para realizar una búsqueda binaria que se base en que matriz_buscada se ordene en orden descendente.

Cuesta menos tiempo ordenar los datos que buscar sobre datos desordenados con lo que, antes de realizar búsquedas del tipo B) o D), es mucho mejor ordenar previamente los datos. Si lo datos están desordenados, no se podrá buscar con coincidencia aproximada o binaria, habrá que seguir usando búsquedas del tipo A) o C) con búsqueda exacta, mucho más lentas e ineficaces.

En muchas ocasiones es más interesante usar la combinación de funciones INDICE y COINCIDIR que BUSCARV, pero este tema da para otro artículo.


Plantilla que busca entre un millón de filas

Descarga la plantilla desde este enlace:

¡¡¡ Un millón de visitas conseguidas !!!


  • En la hoja ‘HISTORIA’ se han introducido datos exactos de las visitas mensuales desde que se creó el blog hasta que alcanzó el millón de visitas, con dos gráficos: uno de visitas acumuladas y otro de visitas mensuales.


  • En la hoja ‘DATOS’ se rellena un millón de filas con el número de visita y la fecha ficticia de la visita, para que cuadre con las visitas mensuales.​ El relleno se hace con una macro que se explica más adelante.


  • En la hoja ‘BUSCAR’ se rellenan mil filas con el número de visita y la fecha de la visita, con una fórmula con 4 tipos de búsqueda. El relleno se hace con una macro que se explica más adelante.

Con la función ELEGIR se llama a la fórmula con el tipo de búsqueda elegido:

Siendo Rango_NumFormula un número del 1 al 4 con el tipo de búsqueda. Cada uno de estos tipos de búsqueda ya los he descrito anteriormente en este artículo, por lo que no me extiendo más. 

  • En la hoja ‘VISITAS’ se elige uno de los 4 tipos de búsqueda y se obtiene el tiempo de la búsqueda. El tipo de búsqueda más frecuente, para un usuario de nivel intermedio de Excel, es con BUSCARV con coincidencia exacta, ¡el más lento!​

Es mucho más rápido BUSCARV con coincidencia aproximada, para lo que los datos a buscar tienen que estar ordenados.​ En Excel 365 se puede buscar con la nueva función BUSCARX. Sigue siendo lenta al buscar con coincidencia exacta.​ La búsqueda binaria es muy rápida con la función BUSCARX, para lo que los datos de búsqueda tienen que estar ordenados, como es el caso.​


Macros para rellenar el millón de visitas

Para probar las búsquedas en un millón de filas he creado unas macros VBA que rellenan una tabla con el número de visita de 1 a un millón y con la fecha de la visita. Están en el módulo: MóduloVisitas

La plantilla descargada pesa poco, unos 60 KB, pero cuando se rellena con un millón de visitas, su tamaño crece considerablemente, hasta unos 20 MB, unas 333 veces más, por lo que es mejor rellenar el millón de filas por primera vez después de descargar la plantilla.

Al hacer clic en el botón de arriba, etiquetado como "Rellena un millón de visitas", se ejecuta la macro Rellenar_Visitas, que rellena un millón de visitas aleatorias y ordenadas para cada mes.

Lo primero que hace esa macro es comprobar que es la primera vez que se ha hecho clic en ese botón y no hará nada las sucesivas veces que se presione el botón.

Luego ejecuta la macro Rellenar_Millón que es realmente la encargada de rellenar un millón de visitas ficticias ordenadas, comenzando por el primer día de la primera visita al blog, el 10 de marzo de 2010, y terminando el día que se superó el millón de visitas, que fue el 17 de abril de 2021. Desde que publiqué el primer artículo pasaron más de 11 años en alcanzar el millón de visitas. A ver si el siguiente millón cuesta menos tiempo...

Con el algoritmo implementado para insertar las fechas de las visitas ficticias, se consigue que la suma del número de visitas de cada mes sea real.

Este es el algoritmo de generación de fechas aleatorias ordenadas:

Es importante resaltar que la fecha aleatoria, calculada con la variable dtAleatoria, se redondea a 5 decimales.

Si no se hiciera este redondeo ocurriría el problema detectado mientras programaba este algoritmo, lo que me sirvió de inspiración para publicar el siguiente artículo, en el que explico detalladamente un error en el motor de cálculo de Excel con los formatos numéricos de fecha:

Fechas desbordadas aleatoriamente en Excel


Además de rellenar un millón de visitas, se rellenan mil búsquedas de visitas con este código:

Con estas mil fórmulas se consigue que el recálculo de los tipos de búsqueda ineficaces sea más lento, como ocurre en tantas ocasiones si se usa la búsqueda inadecuada, que no da problemas con pocas filas pero que, cuando crecen las filas de las tablas, se vuelve tremendamente lenta, y todo el mundo se extraña que, yendo tan bien antes, ahora sea insufrible el recálculo de la misma plantilla.

¿Te ha pasado alguna vez tener que esperar minutos u horas a que acabe el recálculo de Excel?

¡A mí muchas veces con plantillas diseñadas por otros que he tenido que corregir para eliminar las búsquedas ineficaces!


Macros para calcular los tiempos de recálculo

Interesa calcular el tiempo que se tarda en buscar con cada uno de los 4 tipos de búsqueda, para lo que he creado el módulo MóduloTiempos, al que le he añadido las macros copiadas del siguiente enlace, que explica cómo medir el tiempo de cálculo:

Excel performance: Improving calculation performance

En la hoja 'VISITAS' se escucha al siguiente evento cuando cambia el tipo de búsqueda ("Rango_Tipo_Fórmula") o el número de la visita ("Rango_Valor"):

La macro Esperar_Recalcular espera 1 segundo antes de lanzar la macro Recalcular_Todo que llama a su vez a la macro: FullcalcTimer que es la que recalcula todas las fórmulas del libro abierto, mide el tiempo de recálculo en milisegundos, y lo muestra en la hoja 'VISITAS'.

Ya sabes que puedas comentar un poco más abajo las dudas o aclaraciones que necesites sobre las fórmulas o las macros explicadas en este artículo.

¡¡¡ Un millón de visitas conseguidas !!!

Gracias a todos los lectores del blog

Este blog ha conseguido superar un millón de visitas, lo que no está nada mal para ser un blog dedicado a las hojas de cálculo en Excel.

En este artículo encontrarás los enlaces a las entradas más vistas últimamente y una plantilla de regalo, con varias maneras de buscar datos entre un millón de filas ordenadas, con las funciones de búsqueda que se ven en la siguiente imagen:


Entradas más vistas en los últimos meses


Descarga la plantilla de regalo

Descarga la plantilla que te regalo por haberme ayudado a que este blog haya conseguido alcanzar el millón de visitas.

Con esta plantilla se genera un millón de visitas aleatorias ordenadas, y se buscan las visitas con las funciones BUSCARV (en cualquier versión de Excel) y BUSCARX (sólo en Excel 365), desde Google (con el botón "Excel Download") o desde el enlace a Microsoft OneDrive:

Un millón de visitas_PW1.xlsm 


  1. Abre el archivo, permite la edición y habilita el contenido y las macros.
  2. Haz clic en el botón: Rellena un millón de visitas para generar un millón de filas con fechas de visita aleatorias y ordenadas.
  3. Elige uno de los 4 tipos de fórmulas, sabiendo que BUSCARX sólo está disponible en las versiones de Excel 365 o Excel Online o Excel para Android.
  4. Busca un número de visita sabiendo que, cuanto mayor sea la visita, más tiempo costará buscarla si usas la búsqueda inapropiada, que es lo más común si tu nivel de Excel es básico o intermedio. Incluso diría que con un nivel avanzado de Excel tampoco es habitual saber usar las búsquedas correctamente.
  5. NOTA: En la hoja 'BUSCAR' hay 1000 búsquedas seguidas. Si fueran 10 o 100 veces más, cosa que me he encontrado en muchas hojas de Excel, serían extremadamente lentas las búsquedas inapropiadas.
  6. Prueba a buscar la visita nº 999000 con los 4 tipos de búsquedas, lo que hace que se busquen las últimas 1000 visitas en la hoja 'BUSCAR'. Si apuntas los tiempos de búsqueda verás que con dos búsquedas se encuentran en milisegundos y con las otras dos búsquedas se tarda varios segundos en buscarlas, unas 20 veces más en mi PC. Si en lugar de 1000 búsquedas se hicieran 30000 búsquedas, lo que no es raro para confeccionar algunos informes, el proceso de búsqueda sería extremadamente lento.


    Cómo buscar entre un millón de filas ordenadas

    Si quieres conseguir ser un experto en Excel y que no te mueras de asco esperando a que se complete el recálculo de miles de fórmulas, no uses búsquedas con coincidencia exacta cuando la columna de búsqueda está ordenada.

    Aprende a usar la doble búsqueda aproximada, con la función BUSCARV en cualquier versión de Excel, o la búsqueda binaria con la función BUSCARX en Excel 365.

    Con estas búsquedas aprenderás que no todas las fórmulas son válidas para cualquier número de filas. Una búsqueda que funciona para 10.000 filas será demasiado lenta para 100.000 filas e inaceptable para un millón de filas. Cuando editamos una fórmula tenemos que tener idea de su eficacia y saber si su rendimiento será aceptable cuando crezcan las filas de las tablas o los datos de un rango.

    ¿Quieres seguir esperando a que Excel te devuelva el control cuando apremia entregar un informe?

    Me he encontrado con demasiados informes que tardaban en ser generados minutos e incluso horas por usar las funciones BUSCARV o BUSCARX con coincidencia exacta, cuando las coincidencias aproximadas/binarias sobre un campo ordenado permiten generar los mismos informes en cuestión de segundos.


    Vídeo de celebración del millón de visitas

    En este vídeo comento la plantilla que regalo por superar el millón de visitas en mi blog.


    En el siguiente artículo explico cómo he diseñado esta plantilla, cómo insertar un millón de filas en una tabla y cómo:


    Espero tu visita regular a mi blog para no tardar otros 10 años en conseguir el siguiente millón de visitas.

    Turnos Urgencias Hospital - Fase 3 Ejecución 2

    En el artículo anterior adjunté el Prototipo 1 de la Fase 3 de Ejecución del proyecto:

    Turnos Urgencias Hospital - Fase 3 Ejecución 1

    En esta entrada adjunto el Prototipo 2 con las siguientes funcionalidades:

    1. REGISTRAR: nuevo empleado o actualizarlo. Se deben rellenar todos los campos obligatorios y no debe existir el Nº Empleado en la Base de Datos para registrarlo por primera vez. Si ya existe el Nº Empleado se trata de una actualización.
    2. CHEQUEAR_REGISTRO: de los campos obligatorios
    3. BUSCAR_Empleado: en la Base de Datos
    4. CHEQUEAR_EMPLEADO: por si hay que actualizar sus datos y sus capacidades
    5. ACTUALIZAR_EMPLEADO: en la Base de Datos y en Capacidades
    6. REGISTRAR_EMPLEADO: en la Base de Datos y en Capacidades


    Descripción del Prototipo 2

    En esta imagen gif animada aparecen las 3 hojas involucradas en el registro y búsqueda de empleados y sus capacidades:


    Con los botones amarillos de arriba se puede ir a las 3 hojas:

    • REGISTRO: Permite limpiar los datos, registrar a un empleado y sus capacidades y buscar un empleado en la base de datos.
      • Se introducen los datos y capacidades (con un desplegable: SI o NO) de un empleado. Todos los campos son obligatorios.
      • Botón LIMPIAR para limpiar los datos y capacidades.
      • Botón REGISTRAR para introducir los datos del empleado en las hojas: 'BASE DE DATOS' y 'CAPACIDADES'.
      • Botón BUSCAR para buscar un empleado por su Nº Empleado o Nº Plaza o por parte de su Nombre y Apellidos.
    • BASE DE DATOS: Tabla con los datos de cada empleado:
      • Nombre y Apellidos
      • Nº Empleado
      • Nº Plaza
      • Teléfono
      • Correo Electrónico
    • CAPACIDADES: Tabla con las capacidades de cada empleado:
      • Nombre y Apellidos
      • Reanimación
      • Observación
      • Respiratorio
      • Polivalente
      • CA
      • CB


    Descarga del Prototipo 2

    Descarga este 2º prototipo desde Google (con el botón "Excel Download") o desde el enlace a Microsoft OneDrive:

    Base de datos TCAES - PW2.xlsm


    Abre el archivo, permite la edición y habilita el contenido y las macros para probar el Prototipo 2 para el cálculo de ubicaciones en los turnos del Servicio de Urgencias de un hospital.


    Subida al foro del Prototipo 2

    Este prototipo lo subí al foro.todoexcel.com en el siguiente mensaje:

    Urgencias hospital-Rotación puestos trabajo a turnos - Mensaje #10

    En ese mensaje le dije a Toyce que:

    Para estudiar el flujo de este programa, deberías tener tiempo para analizar las macros, que se alejan del tipo de código que genera el Grabador de Macros, con el que todos empezamos a programar en lenguaje VBA.

    ¿Quién no ha aprendido VBA grabando macros? 

    ¡Que levante la mano!


    Macros del Prototipo 2

    Para este prototipo he programado las siguiente macros:

    • REGISTRAR: Sirve para registrar por primera vez un empleado o para actualizar los datos y capacidades de un empleado existente:
      • Llama a la macro CHEQUEAR_REGISTRO para comprobar que hay datos en los campos obligatorios antes de registrar al empleado.
      • Si faltan datos obligatorios aparece el mensaje: "Para poder registrar al empleado faltan datos obligatorios: " & sObligatorio, indicando qué dato falta.
      • Si están todos los datos obligatorios, llama a la macro BUSCAR_Empleado por su Nº Empleado.
      • Si no se encuentra el Nº Empleado en la Base de Datos, se hace la pregunta: "¿Quiere registrar al nuevo nº empleado: " & sNúmEmpleado & "?"
        • Respondiendo que Sí se llama a la macro REGISTRAR_EMPLEADO, que realizará el registro de los datos y capacidades del empleado en las correspondientes tablas.
        • A continuación llama a la macro BUSCAR que busca al empleado en la Base de Datos y copia sus datos en el Registro.
      • Si ya se encuentra el Nº Empleado en la Base de Datos, se llama a la macro CHEQUEAR_EMPLEADO, por si hay que actualizar sus datos y sus capacidades.
        • Si se hay cambios en los datos del empleado, se hace la pregunta: "¿Quiere actualizar el empleado nº: " & sNúmEmpleado & "?"
        • Si se responde que Sí, se llama a la macro ACTUALIZAR_EMPLEADO que actualizará los datos y capacidades del empleado en la Base de Datos.
    • CHEQUEAR_REGISTRO: Comprueba que se han introducido todos los datos obligatorios antes de registrar o actualizar a un empleado.
      • Si falta algún dato obligatorio, lo selecciona en la hoja 'REGISTRO' y devuelve el nombre del campo obligatorio que está vacío.
      • Si están informados todos los campos obligatorios, devuelve un valor vacío.
    • BUSCAR_Empleado: Busca al empleado: en la Base de Datos por:
      • Nº Empleado completo, con la función: Find(sNúmEmpleado, , , xlWhole)
      • Una parte de Nombre y Apellidos, con la función: Find(sNúmEmpleado, , , xlPart)
      • Nº Plaza completo, con la función: Find(sNúmEmpleado, , , xlWhole)
      • Si se encuentra al empleado, devuelve el número de fila.
      • Si no se encuentra devuelve un cero y muestra el mensaje: "No se ha encontrado ningún empleado con " & sTipo & ": " & sNúmEmpleado
    • REGISTRAR_EMPLEADO: Registra al empleado en la Base de Datos y en Capacidades:
      • Registra los datos del empleado creando una nueva fila en la tabla de la Base de Datos con:
        • Dim miNuevaFila As ListRow
        • Set miNuevaFila = Sheets("BASE DE DATOS").ListObjects("TABLA_BASE_DATOS").ListRows.Add
        • With miNuevaFila
        •         .Range(1) = Range("REGISTRO_Nombre").Value2
        •         ...
        • End With
      • Registra las capacidades del empleado creando una nueva fila en la tabla de Capacidades con:
        • Set miNuevaFila = Sheets("CAPACIDADES").ListObjects("TABLA_CAPACIDADES").ListRows.Add
        •     With miNuevaFila
        •         .Range(1) = Range("REGISTRO_Nombre").Value2
        •        ...
        • End With
    • BUSCAR: busca al empleado en las tablas de Base de Datos y de Capacidades, y copia sus datos en el Registro:
      • Llama a la macro BUSCAR_Empleado, que lo busca en la Base de Datos por el Nº Empleado, o por parte del Nombre y Apellidos, o por su Nº Plaza.
      • Si lo encuentra, llama a la macro CAMBIAR_HIPERVINCULOS, que cambia los hipervínculos a las hojas 'BASE DE DATOS' y 'CAPACIDADES'.
      • Llama a la macro RESALTAR_ELIMINADO para quitar lo resaltado en las tablas de Base de Datos y de Capacidades.
      • Llama a la macro RESALTAR_FILA para resaltar la fila del empleado en las tablas de Base de Datos y de Capacidades.
      • Llama a la macro COPIAR_Empleado para copiar los datos y capacidades en la hoja 'REGISTRO'.
    • CAMBIAR_HIPERVINCULOS: para seleccionar la fila del empleado encontrado en los botones con los hipervínculos en las 3 hojas, llamando a la macro CAMBIAR_HIPERVINCULO_HOJA
    • CAMBIAR_HIPERVINCULO_HOJA: es la macro que cambia los hipervínculos para ir a la fila del empleado encontrado:
      •  ActiveSheet.Shapes.Range(Array("Ir a " & sHoja)).Select
      •  Selection.ShapeRange.Item(1).Hyperlink.SubAddress = "'" & sHoja & "'!A" & lEmpleado
    • RESALTAR_ELIMINADO:  Elimina las filas resaltadas de las dos tablas.
    • RESALTAR_FILA: Resalta en color verde la fila del empleado encontrado en las dos tablas.
    • COPIAR_Empleado: Copia los datos y capacidades del empleado en la hoja 'REGISTRO'.
    • CHEQUEAR_EMPLEADO: Comprueba si hay cambios en los datos y capacidades del empleado.
    • ACTUALIZAR_EMPLEADO: Actualiza los datos en las tablas de Base de Datos y de Capacidades.

    Vídeo Fase de Ejecución 2 - Turnos Urgencias Hospital

    En este vídeo comento las macros necesarias para limpiar, registrar, actualizar y buscar datos de empleados TCAES.


    Lo mejor es que descargues la plantilla y analices las macros y, si tienes alguna duda, escribe un comentario más abajo y te intentaré responder lo más pronto posible.

    En el próximo artículo trataré la Fase 4 de Control del proyecto.

    Turnos Urgencias Hospital - Fase 3 Ejecución 1

    En el artículo anterior comenté la Fase de Cambios del proyecto:

    Turnos Urgencias Hospital - Fase de Cambios

    Realmente no existe una fase de cambios pero lo que si que ocurre habitualmente es que los cambios en las especificaciones hacen que haya varias olas de planificación y de ejecución de un proyecto.

    En esta segunda ola de ejecución, convertiré la plantilla enviada por Toyce en un prototipo más funcional, como se puede ver en la siguiente imagen animada:



    Vídeo Fase de Ejecución 1 - Turnos Urgencias Hospital

    Cuando ya se ha comenzado la Fase 3 de Ejecución, llegan cambios que hay que planificar de nuevo y, a veces como es el caso, tirar a la basura todo lo realizado en la Fase de Ejecución y volver a iniciar nuevas Fases de Planificación y de Ejecución. Puedes hacerte una idea de lo que ocurrió con este proyecto en este vídeo:


    Plantilla Base de datos TCAES

    Toyce subió al foro una plantilla en la que creó una "base de datos" con la ayuda de un vídeo que encontró en YouTube y que necesitaba adaptar a este proyecto. Puedes descargar la plantilla Base de datos TCAES desde este enlace si estás registrado en el foro.todoexcel.com:

    Urgencias hospital-Rotación puestos trabajo a turnos - Mensaje #4

    Analicé la hoja 'REGISTRO' y comprobé que se podía mejorar en cuanto a su apariencia para alinear los datos del empleado y sus capacidades. Los botones se podían colocar en una posición más cómoda.

    Me sorprendió el botón amarillo de arriba a la derecha para ir a la hoja 'BASE DE DATOS'. ¿Por qué no ir a cualquier hoja del libro?

    En las hojas 'BASE DE DATOS' y 'CAPACIDADES' había otro botón para ir a la hoja 'REGISTRO'.

    Para cambiar de hoja se llamaba a las macros IRAREGISTRO e IRBASE que seleccionaban las hojas correspondientes.


    Prototipo 1: Base de datos TCAES

    Lo primero que hice fue eliminar esas dos macros y crear 3 botones amarillos con hipervínculos para cambiar de hoja, como se puede ver en la siguiente imagen:


    Lo siguiente fue agrupar los datos del empleado por un lado y sus capacidades por otro, para que resultará más fácil editar esos campos. También alineé los botones en vertical, cambiando el nombre del botón NUEVO por LIMPIAR, un verbo más en consonancia con su función.

    Comprobé que no se habían creado nombres definidos en el Administrador de Nombres, por lo que decidí crear un nombre para cada celda de datos de la hoja 'REGISTRO', con los siguientes nombres mostrados a la derecha.

    Así es más fácil referenciar cada campo en las macros que servirán para limpiar, registrar y buscar empleados y sus capacidades. Con referencias a celdas no se sabe qué campo se está seleccionando.

    He añadido un desplegable, mediante validación de datos con una lista, para editar cada una de las capacidades con un SI o un NO.

    Modifiqué la macro del botón LIMPIAR para limpiar los datos de empleados y sus capacidades. Es más claro usar el nombre definido:

    Range("REGISTRO_Nombre").Value2 = ""

    Que seleccionar una celda por su referencia:

    Range("D8").Select

    Selection.ClearContents

    También modifiqué la macro BUSCAR, para buscar un empleado en la base de datos a partir el número de empleado, o de parte del nombre del empleado, con la función Find() y localiza al empleado haciendo que resalte con color verde de fondo en las hojas 'BASE DE DATOS' y 'CAPACIDADES'. Además copia esos datos en la hoja 'REGISTRO' con la macro COPIAR_Empleado

    Para probar el proyecto en la Fase de Control, añadí datos ficticios a las hojas  'BASE DE DATOS' y 'CAPACIDADES', haciendo búsquedas por número de empleado y por parte de texto del nombre del empleado.

    Este primer prototipo lo subí al foro en el siguiente mensaje, desde donde lo puedes descargar si estás registrado en el foro.todoexcel.com:

    Urgencias hospital-Rotación puestos trabajo a turnos - Mensaje #8


    Descarga del prototipo 1

    Descarga este prototipo desde Google (con el botón "Excel Download") o desde el enlace a Microsoft OneDrive:

    Base de datos TCAES - PW1.xlsm 


    Abre el archivo, permite la edición y habilita el contenido y las macros para probar el Prototipo 1 para el cálculo de ubicaciones en los turnos del Servicio de Urgencias de un hospital.


    En este prototipo he eliminado la hoja 'BUSCAR' y falta codificar la macro REGISTRAR y añadir lógica para cumplir las condiciones de la hoja 'UBICACIONES', lo que intentaré hacer en la siguiente Fase de Ejecución de este proyecto.

    Puedes ver el siguiente artículo en este enlace:

    Turnos Urgencias Hospital - Fase 3 Ejecución 2

    Mi lista de blogs