Aprende cómo crear un sistema profesional de citas médicas en Excel desde cero, con base de datos de pacientes, formularios integrados en la hoja, generación automática de ID, panel de gestión, registro de diagnósticos y macros VBA creadas con ayuda de inteligencia artificial, sin necesidad de saber programar.
En este video aprenderás cómo crear un sistema de citas médicas en Excel con macros VBA e inteligencia artificial, explicado paso a paso y sin necesidad de saber programar.
En este tutorial paso a paso te enseñaré cómo automatizar el registro de pacientes, agendar citas con formularios integrados en Excel y gestionar las citas mediante botones y macros VBA creadas con ayuda de inteligencia artificial. Aprende a crear un sistema médico funcional sin necesidad de saber programar ni pagar un software mensual. Ideal para médicos, clínicas, consultorios y emprendedores que buscan una herramienta práctica, editable y personalizable.
🏅 Consigue la Plantilla Premium de Citas Médicas (Listo para Usar)
Si ya seguiste todos los pasos de este tutorial y quieres ahorrar tiempo, evitar errores y tener funciones avanzadas sin configurarlas manualmente, puedes adquirir la Plantilla Premium de Citas Médicas en Excel.
👉 Esta plantilla ya incluye:
✔️ Base de datos con pacientes y citas completamente configurada
✔️ Formularios de alta automáticos
✔️ Panel de gestión visual
✔️ ID automáticos y panel de diagnóstico
✔️ Automatizaciones con VBA
✔️ Botones integrados para registrar y completar citas
✔️ Historial dinámico de las últimas citas
✔️ Diseñada profesionalmente para consultorios médicos
Ya no tendrás que copiar códigos ni crear macros desde cero — viene lista para utilizar desde el primer momento.
🔗 Compra la plantilla premium aquí:
💡 Ideal para médicos, clínicas, consultorios emergentes o administradores que quieren un sistema profesional sin pagar software caro.
Crear la carpeta y preparar el archivo de Excel para trabajar con macros
Antes de comenzar con fórmulas o automatizaciones, lo primero es trabajar de forma ordenada. Esto te evitará errores más adelante, especialmente cuando trabajes con fechas y horarios de citas médicas.
Paso 1: Crear una carpeta en el escritorio para guardar el proyecto
Crea una carpeta en el escritorio de tu computador y asígnale el nombre Citas Médicas Plantilla. Allí guardaremos todos los archivos del proyecto para mantenerlos organizados.
Paso 2: Crear el libro de Excel
Dentro de la carpeta creada:
- Haz clic derecho en un espacio vacío.
- Selecciona Nuevo → Hoja de cálculo de Microsoft Excel.
- No necesitas darle un nombre todavía
Paso 3: Guardar el archivo de Excel habilitado para macros
- Ve a Archivo → Guardar como → Examinar.
- Busca y selecciona la carpeta Citas Médicas Plantilla.
- En el apartado “Tipo”, selecciona Libro de Excel habilitado para macros (*.xlsm).
- Cambia el nombre del archivo a: Citas Médicas Plantilla
- Haz clic en Guardar.
💡 Consejo: Este formato permite utilizar macros VBA en nuestro proyecto y guardar las automatizaciones que crearemos con ayuda de inteligencia artificial.
Crear las hojas principales del sistema de citas médicas
Antes de agregar información, fórmulas o macros, vamos a definir la estructura inicial de nuestra plantilla.
Nuestro sistema contará con tres hojas principales:
- Home
- Pacientes
- Citas
Estas hojas serán la base para organizar los pacientes y gestionar las citas médicas.
Crear las hojas dentro del archivo
- En la parte inferior izquierda de Excel, haz clic en el botón “+” para crear una nueva hoja.
- Crea las hojas necesarias hasta tener tres en total.
- Cambia el nombre de cada pestaña haciendo doble clic sobre ella.
Debes dejar exactamente estos nombres:
- Home
- Pacientes
- Citas
¿Por qué estas tres hojas?
Aunque todavía no vamos a configurar estas hojas, es importante conocer la función de cada una:
- Home → Será el panel principal desde donde gestionaremos el sistema.
- Pacientes → Contendrá la base de datos con la información de los pacientes.
- Citas → Permitirá almacenar y administrar las citas médicas.
Organizar la información de esta manera nos permitirá tener una plantilla:
- Más ordenada y profesional.
- Más fácil de mantener y ampliar.
- Más sencilla de automatizar mediante macros.
- Más fácil de duplicar y adaptar a otros consultorios.
Crear la tabla de pacientes y configurar sus columnas en Excel
En esta sección crearemos la base de datos de pacientes en Excel y organizaremos la información en una tabla. Además, asignaremos un nombre a una de sus columnas para poder utilizarla posteriormente como lista en el sistema.
Estructura de la hoja Pacientes
En la hoja Pacientes vamos a crear 10 columnas en la fila 1 con los siguientes encabezados:
- ID
- Nombre
- Identificacion
- Correo
- Telefono
- Direccion
- Fecha_Nacimiento
- Genero
- Tipo_Sangre
- Nombre_Identificacion
⚠️ Por ahora solo creamos los encabezados.
Más adelante configuraremos automatizaciones como la generación del ID y la concatenación de la columna 10
📋 Crear la tabla de pacientes
- Selecciona las columnas creadas, incluyendo los encabezados.
- Ve a Insertar → Tabla.
- Marca “La tabla tiene encabezados” y haz clic en Aceptar.
💡 Consejo: No es obligatorio cambiar el nombre de la tabla, pero puedes usar BDPacientes si deseas identificarla fácilmente. Encontrarás esta opción en Diseño de tabla.
🔗 Concatenar el nombre y la identificación del paciente
- En la columna Nombre_Identificacion, escribe la siguiente fórmula:
=CONCATENAR([@Nombre];" - CI: ";[@Identificacion])
2. Presiona Enter.
Excel aplicará automáticamente la fórmula a las demás filas de la tabla.
💡 Consejo: Así podremos identificar fácilmente a cada paciente por su nombre y número de identificación.
🏷️ Asignar un nombre a la columna de Nombre_Identificacion
- Selecciona la primera celda de la columna Nombre_Identificacion.
- Ve a la pestaña Fórmulas y haz clic en Administrador de nombres.
- Selecciona Nuevo.
- En el campo Nombre, escribe
Nombre. - Haz clic en Aceptar y listo.
Formulario de Pacientes
En esta sección crearemos el formulario de pacientes, diseñaremos su interfaz y configuraremos el código VBA para registrar automáticamente la información en nuestra base de datos.
🎨 Diseño del formulario Pacientes
- En la hoja Home, crea el diseño del formulario siguiendo el ejemplo de la imagen o del video tutorial.
- Agrega los siguientes campos:
Campos del formulario
La estructura quedará así:
| Campo | Celda | Tipo de celda |
|---|---|---|
| Nombre | C3:D3 | Texto |
| Identificación | C4:D4 | Texto |
| Correo | C5:D5 | General |
| Teléfono | C6:D6 | Texto |
| Dirección | C7:D7 | General |
| Fecha de Nacimiento | C8:D8 | Fecha corta |
| Género | C9:D9 | General |
| Tipo de Sangre | C10:D10 | General |
📋 Crear listas desplegables para Género y Tipo de Sangre
Para elegir estas opciones rápidamente, utilizaremos la herramienta Validación de datos de Excel.
1. Configurar la lista de Género
- Selecciona las celdas C9.
- Ve a Datos → Validación de datos.
- En Permitir, selecciona Lista.
- En el campo Origen, copia y pega estas opciones:
Masculino;Femenino;Otro - Haz clic en Aceptar.
2. Configurar la lista de Tipo de Sangre
- Selecciona las celdas C10.
- Ve a Datos → Validación de datos.
- En Permitir, selecciona Lista.
- En el campo Origen, copia y pega estas opciones:
A+;A-;B+;B-;AB+;AB-;O+;O- - Haz clic en Aceptar.
💡 Consejo: Si Excel no reconoce las opciones separadas por punto y coma, utiliza comas como separador, según la configuración regional de tu equipo.
💻 Programar el formulario de pacientes con VBA
En esta sección crearemos el código VBA que permitirá registrar automáticamente los datos del formulario en nuestra base de datos de pacientes.
1. Abrir Visual Basic y crear el módulo
- En Excel, ve a la pestaña Programador y haz clic en Visual Basic. También puedes abrirlo directamente presionando las teclas Alt + F11.
- En el editor de Visual Basic, ubica el panel Proyecto.
- Haz clic derecho en un espacio en blanco del panel y selecciona Insertar → Módulo.
- Selecciona el módulo creado y cambia su nombre a Pacientes desde la ventana Propiedades.
💡 Consejo: Si no ves los paneles Proyecto o Propiedades, puedes activarlos desde el menú Ver del editor de Visual Basic.
2. Crear el código VBA con ayuda de Gemini
Antes de escribir el código manualmente, utilizaremos Gemini para generar las instrucciones necesarias para que nuestro formulario funcione correctamente.
- Abre Gemini y escribe un prompt detallado indicando qué funciones debe realizar el código: generar automáticamente un ID único para cada paciente, copiar toda la información del formulario y guardarla en la hoja Pacientes, y limpiar los campos del formulario después de registrar los datos, sin eliminar las listas desplegables ni modificar sus formatos y configuraciones.
- Envía el prompt a Gemini y espera a que genere el código VBA. Si necesitas ayuda para redactar las instrucciones, en el video tutorial de esta página encontrarás la explicación paso a paso.
- Cuando el código esté listo, cópialo y pégalo en el módulo Pacientes que creamos en el paso anterior.
A continuación, te dejo el código completo para que puedas copiarlo y pegarlo directamente, sin complicaciones.
Option Explicit
' ==============================================================================
' MÓDULO DE REGISTRO DE PACIENTES - EXCEL VBA
' Este código lee el formulario en la hoja "Home", genera un ID único consecutivo,
' guarda la información en "Pacientes" respetando formatos y ceros iniciales,
' y limpia el formulario con celdas combinadas sin perder la lista desplegable.
' ==============================================================================
Sub RegistrarPaciente()
Dim wsHome As Worksheet
Dim wsPacientes As Worksheet
Dim ultimaFila As Long
Dim i As Long
Dim maxID As Long
Dim nuevoIDNum As Long
Dim nuevoID As String
Dim filaDestino As Long
Dim idTexto As String
Dim numExtraido As Long
' Desactivar actualización de pantalla para evitar parpadeos y acelerar la ejecución
Application.ScreenUpdating = False
' Definir hojas de trabajo
On Error Resume Next
Set wsHome = ThisWorkbook.Sheets("Home")
Set wsPacientes = ThisWorkbook.Sheets("Pacientes")
On Error GoTo 0
' Validar que existan ambas hojas en el libro
If wsHome Is Nothing Or wsPacientes Is Nothing Then
MsgBox "No se encontraron las hojas 'Home' o 'Pacientes'. Por favor verifica los nombres de las pestañas.", vbCritical, "Error de Hojas"
Application.ScreenUpdating = True
Exit Sub
End If
' --------------------------------------------------------------------------
' PASO 0: LEER Y VALIDAR CAMPOS OBLIGATORIOS DEL FORMULARIO
' Nota: En celdas combinadas (ej. C3:D3), VBA lee directamente desde la celda superior izquierda (C3).
' --------------------------------------------------------------------------
Dim nombre As String
Dim identificacion As String
Dim correo As String
Dim telefono As String
Dim direccion As String
Dim fechaNac As Variant
Dim genero As String
Dim tipoSangre As String
nombre = Trim(CStr(wsHome.Range("C3").Value))
identificacion = Trim(CStr(wsHome.Range("C4").Value))
correo = Trim(CStr(wsHome.Range("C5").Value))
telefono = Trim(CStr(wsHome.Range("C6").Value))
direccion = Trim(CStr(wsHome.Range("C7").Value))
fechaNac = wsHome.Range("C8").Value
genero = Trim(CStr(wsHome.Range("C9").Value))
tipoSangre = Trim(CStr(wsHome.Range("C10").Value))
' Validar que los datos primarios no estén vacíos
If nombre = "" Then
MsgBox "Por favor ingresa el Nombre del paciente.", vbExclamation, "Campo Obligatorio"
wsHome.Activate
wsHome.Range("C3").Select
Application.ScreenUpdating = True
Exit Sub
End If
If identificacion = "" Then
MsgBox "Por favor ingresa la Identificación del paciente.", vbExclamation, "Campo Obligatorio"
wsHome.Activate
wsHome.Range("C4").Select
Application.ScreenUpdating = True
Exit Sub
End If
' --------------------------------------------------------------------------
' PASO 1: ENCONTRAR EL ID MÁS ALTO Y LA PRIMERA FILA VACÍA EN BASE DE DATOS
' --------------------------------------------------------------------------
' 1.1 Recorrer la Columna A para hallar el número máximo (ignora si borraste registros antiguos)
ultimaFila = wsPacientes.Cells(wsPacientes.Rows.Count, "A").End(xlUp).Row
maxID = 0
For i = 2 To ultimaFila
idTexto = Trim(CStr(wsPacientes.Cells(i, 1).Value))
If idTexto <> "" Then
' Limpiar prefijos "P-" o "p-" para evaluar solo los dígitos numéricos
If InStr(1, idTexto, "P-", vbTextCompare) > 0 Then
idTexto = Replace(idTexto, "P-", "", , , vbTextCompare)
idTexto = Replace(idTexto, "p-", "", , , vbTextCompare)
End If
If IsNumeric(idTexto) Then
numExtraido = CLng(idTexto)
If numExtraido > maxID Then
maxID = numExtraido
End If
End If
End If
Next i
' Asignar el siguiente consecutivo y formatear a "P-0001", "P-0026", etc.
nuevoIDNum = maxID + 1
nuevoID = "P-" & Format(nuevoIDNum, "0000")
' 1.2 Buscar la primera fila completamente libre (evita huecos vacíos en la hoja Pacientes)
filaDestino = 2
Do While wsPacientes.Cells(filaDestino, "A").Value <> "" _
Or wsPacientes.Cells(filaDestino, "B").Value <> "" _
Or wsPacientes.Cells(filaDestino, "C").Value <> ""
filaDestino = filaDestino + 1
Loop
' --------------------------------------------------------------------------
' PASO 2: GUARDAR LOS DATOS RESPETANDO FORMATOS DE TEXTO Y FECHA
' --------------------------------------------------------------------------
With wsPacientes
' Columna A: ID
.Cells(filaDestino, 1).NumberFormat = "@"
.Cells(filaDestino, 1).Value = nuevoID
' Columna B: Nombre
.Cells(filaDestino, 2).Value = nombre
' Columna C: Identificación (Formato Texto para no perder ceros iniciales como 099...)
.Cells(filaDestino, 3).NumberFormat = "@"
.Cells(filaDestino, 3).Value = CStr(identificacion)
' Columna D: Correo
.Cells(filaDestino, 4).Value = correo
' Columna E: Teléfono (Formato Texto para conservar ceros al inicio)
.Cells(filaDestino, 5).NumberFormat = "@"
.Cells(filaDestino, 5).Value = CStr(telefono)
' Columna F: Dirección
.Cells(filaDestino, 6).Value = direccion
' Columna G: Fecha de nacimiento (Garantiza tipo Fecha "dd/mm/yyyy")
.Cells(filaDestino, 7).NumberFormat = "dd/mm/yyyy"
If IsDate(fechaNac) Then
.Cells(filaDestino, 7).Value = CDate(fechaNac)
Else
.Cells(filaDestino, 7).Value = fechaNac
End If
' Columna H: Género
.Cells(filaDestino, 8).Value = genero
' Columna I: Tipo de sangre
.Cells(filaDestino, 9).Value = tipoSangre
End With
' --------------------------------------------------------------------------
' PASO 3: LIMPIAR EL FORMULARIO
' Usar .Value = "" en la celda superior izquierda de cada rango combinado evita
' el Error 1004 y MANTIENE INTACTAS las listas desplegables, bordes y formatos.
' --------------------------------------------------------------------------
wsHome.Range("C3").Value = "" ' Nombre (C3:D3)
wsHome.Range("C4").Value = "" ' Identificación (C4:D4)
wsHome.Range("C5").Value = "" ' Correo (C5:D5)
wsHome.Range("C6").Value = "" ' Teléfono (C6:D6)
wsHome.Range("C7").Value = "" ' Dirección (C7:D7)
wsHome.Range("C8").Value = "" ' Fecha de Nacimiento (C8:D8)
wsHome.Range("C9").Value = "" ' Género (C9:D9 - Mantiene la lista desplegable)
wsHome.Range("C10").Value = "" ' Tipo de Sangre (C10:D10)
' Posicionar el cursor en el primer campo para el siguiente registro
wsHome.Activate
wsHome.Range("C3").Select
' Activar nuevamente la actualización de pantalla
Application.ScreenUpdating = True
' Confirmación final al usuario
MsgBox "¡Paciente registrado exitosamente!" & vbCrLf & "ID Asignado: " & nuevoID, vbInformation, "Registro Completado"
End Sub
3. Asignar la macro al botón Registrar paciente
Ahora vincularemos el código VBA al botón del formulario para que podamos registrar nuevos pacientes con un solo clic.
- En la hoja Home, haz clic derecho sobre el botón Registrar paciente.
- Selecciona la opción Asignar macro.
- En la lista de macros, selecciona RegistrarPaciente y haz clic en Aceptar.
- Guarda los cambios del archivo de Excel.
¡Listo! Ahora puedes completar el formulario y hacer clic en Registrar paciente para guardar la información en la base de datos.
Crear la tabla de Citas, crear el formulario y el código VBA
En esta sección crearemos la tabla de citas médicas, diseñaremos el formulario para agendar nuevas citas y configuraremos el código VBA para registrar la información automáticamente en nuestra base de datos.
📋 Estructura de la hoja Citas
En la hoja Citas, vamos a crear 8 columnas en la fila 1 con los siguientes encabezados:
- ID
- ID_Paciente
- Nombre
- Identificacion
- Fecha_Cita
- Hora
- Observaciones
- Estado
Una vez ingresados los encabezados, selecciona las columnas creadas y ve a Insertar → Tabla. Marca la opción La tabla tiene encabezados y haz clic en Aceptar, siguiendo el mismo procedimiento que utilizamos en la hoja Pacientes.
💡 Consejo: Puedes asignarle a la tabla el nombre BDCitas desde la pestaña Diseño de tabla para identificarla fácilmente.
🗓️ Crear el formulario de citas médicas con VBA
En esta sección diseñaremos el formulario para agendar citas médicas en Excel y configuraremos el código VBA para registrar automáticamente la información en la hoja Citas.
1. Diseñar el formulario de citas
- En la hoja Home, debajo del formulario de pacientes, crea un nuevo formulario.
- Agrega los tres campos: Pacientes, Fecha y Hora.
- Coloca el título Agendar cita médica y personaliza los colores, bordes y tamaños para mantener el mismo diseño del formulario anterior.
- Añade un botón con el texto Registrar cita.
💡 Consejo: Mantén ambos formularios bien organizados y separados para facilitar el registro de pacientes y la programación de citas.
2. Crear la lista desplegable de pacientes
Como anteriormente asignamos el nombre Nombre a la columna Nombre_Identificacion de la hoja Pacientes, podemos utilizarlo para mostrar automáticamente la lista de pacientes en nuestro formulario de citas.
- En la hoja Home, selecciona la celda donde elegirás al paciente.
- Ve a Datos → Validación de datos.
- En Permitir, selecciona Lista.
- En el campo Origen, escribe:
=Nombre - Haz clic en Aceptar.
¡Listo! Ahora podrás seleccionar un paciente de la lista desplegable, identificándolo por su nombre y número de identificación.
💡 Consejo: Cuando agregues nuevos pacientes a la tabla, sus nombres se incorporarán a la lista para que puedas seleccionarlos al agendar una cita.
3. Código VBA: Crear Prompt
En este paso le pediremos a Gemini que genere el código VBA para registrar las citas médicas. En el prompt debemos indicar que el código tiene que:
- Generar automáticamente un ID único para cada cita.
- Buscar al paciente seleccionado en la hoja Pacientes, utilizando el formato
Ayleen Aspiazu - CI: 0939887484, y obtener su ID, nombre e identificación. - Copiar la fecha y la hora ingresadas en el formulario y guardarlas en la hoja Citas.
- Dejar la columna Observaciones vacía y registrar siempre Pendiente en la columna Estado.
4. Código VBA: Crear el módulo y pegar el código VBA
Una vez que tengamos el código generado por Gemini, vamos a incorporarlo en Excel.
- Presiona Alt + F11 para abrir el editor de Visual Basic. También puedes ingresar desde la pestaña Programador → Visual Basic.
- En el panel Proyecto, haz clic derecho en un espacio en blanco y selecciona Insertar → Módulo.
- Selecciona el módulo creado y cambia su nombre a Citas desde la ventana Propiedades.
- Copia el código generado por Gemini y pégalo dentro del módulo Citas.
- Guarda los cambios del archivo.
💡 Consejo: Revisa que el código esté completo antes de continuar con la asignación de la macro al botón.
Option Explicit
' ==============================================================================
' MÓDULO DE REGISTRO DE CITAS - EXCEL VBA
' Este código lee el formulario de citas en la hoja "Home" (Celdas C15:D15, C16:D16, C17:D17),
' genera un ID único consecutivo (CIT-001, CIT-002, etc.), busca la información
' del paciente en la columna J de la hoja "Pacientes", extrae sus datos (ID, Nombre, CI)
' y guarda la cita en la hoja "Citas" asignando el estado "Pendiente".
' ==============================================================================
Sub RegistrarCita()
' Variables para hojas de trabajo
Dim wsHome As Worksheet
Dim wsPacientes As Worksheet
Dim wsCitas As Worksheet
' Variables para lectura del formulario
Dim pacienteSeleccionado As String
Dim fechaCita As Variant
Dim horaCita As Variant
' Variables para generación de ID
Dim ultimaFilaCitas As Long
Dim i As Long
Dim maxID As Long
Dim numExtraido As Long
Dim idTexto As String
Dim nuevoIDNum As Long
Dim nuevoIDCita As String
' Variables para búsqueda de paciente
Dim ultimaFilaPacientes As Long
Dim filaPaciente As Long
Dim pacienteEncontrado As Boolean
Dim idPaciente As String
Dim nombrePaciente As String
Dim identificacionPaciente As String
' Variable para fila de destino
Dim filaDestino As Long
' Desactivar actualización de pantalla para ejecución rápida sin parpadeos
Application.ScreenUpdating = False
' --------------------------------------------------------------------------
' COMPROBACIÓN DE HOJAS
' --------------------------------------------------------------------------
On Error Resume Next
Set wsHome = ThisWorkbook.Sheets("Home")
Set wsPacientes = ThisWorkbook.Sheets("Pacientes")
Set wsCitas = ThisWorkbook.Sheets("Citas")
On Error GoTo 0
If wsHome Is Nothing Or wsPacientes Is Nothing Or wsCitas Is Nothing Then
MsgBox "No se encontraron las hojas 'Home', 'Pacientes' o 'Citas'." & vbCrLf & _
"Por favor verifica los nombres de las pestañas en Excel.", vbCritical, "Hoja No Encontrada"
Application.ScreenUpdating = True
Exit Sub
End If
' --------------------------------------------------------------------------
' PASO 0: LEER Y VALIDAR CAMPOS DEL FORMULARIO EN 'HOME'
' Nota: En celdas combinadas (C15:D15, C16:D16, C17:D17), VBA lee desde C15, C16 y C17
' --------------------------------------------------------------------------
pacienteSeleccionado = Trim(CStr(wsHome.Range("C15").Value))
fechaCita = wsHome.Range("C16").Value
horaCita = wsHome.Range("C17").Value
' Validaciones de campos vacíos
If pacienteSeleccionado = "" Then
MsgBox "Por favor selecciona un Paciente.", vbExclamation, "Campo Obligatorio"
wsHome.Activate
wsHome.Range("C15").Select
Application.ScreenUpdating = True
Exit Sub
End If
If IsEmpty(fechaCita) Or CStr(fechaCita) = "" Then
MsgBox "Por favor ingresa la Fecha de la Cita.", vbExclamation, "Campo Obligatorio"
wsHome.Activate
wsHome.Range("C16").Select
Application.ScreenUpdating = True
Exit Sub
End If
If IsEmpty(horaCita) Or CStr(horaCita) = "" Then
MsgBox "Por favor ingresa la Hora de la Cita.", vbExclamation, "Campo Obligatorio"
wsHome.Activate
wsHome.Range("C17").Select
Application.ScreenUpdating = True
Exit Sub
End If
' --------------------------------------------------------------------------
' PASO 1: GENERAR ID AUTOMÁTICO EN LA HOJA 'CITAS' (Ej: CIT-001, CIT-002...)
' Busca en la Columna A de 'Citas' el número más alto registrado.
' --------------------------------------------------------------------------
ultimaFilaCitas = wsCitas.Cells(wsCitas.Rows.Count, "A").End(xlUp).Row
maxID = 0
For i = 2 To ultimaFilaCitas
idTexto = Trim(CStr(wsCitas.Cells(i, 1).Value))
If idTexto <> "" Then
' Limpiar prefijo "CIT-" o "cit-" para obtener solo el valor numérico
If InStr(1, idTexto, "CIT-", vbTextCompare) > 0 Then
idTexto = Replace(idTexto, "CIT-", "", , , vbTextCompare)
idTexto = Replace(idTexto, "cit-", "", , , vbTextCompare)
End If
If IsNumeric(idTexto) Then
numExtraido = CLng(idTexto)
If numExtraido > maxID Then
maxID = numExtraido
End If
End If
End If
Next i
nuevoIDNum = maxID + 1
nuevoIDCita = "CIT-" & Format(nuevoIDNum, "000")
' --------------------------------------------------------------------------
' PASO 2: BUSCAR EL PACIENTE EN LA HOJA 'PACIENTES' (COLUMNA J)
' --------------------------------------------------------------------------
ultimaFilaPacientes = wsPacientes.Cells(wsPacientes.Rows.Count, "J").End(xlUp).Row
pacienteEncontrado = False
For i = 2 To ultimaFilaPacientes
If Trim(CStr(wsPacientes.Cells(i, "J").Value)) = pacienteSeleccionado Then
filaPaciente = i
pacienteEncontrado = True
Exit For
End If
Next i
If Not pacienteEncontrado Then
MsgBox "No se encontró la coincidencia del paciente en la Columna J de la hoja 'Pacientes'." & vbCrLf & _
"Verifica que el texto seleccionado coincida exactamente con la lista.", vbCritical, "Paciente No Encontrado"
Application.ScreenUpdating = True
Exit Sub
End If
' Extraer información encontrada del paciente
idPaciente = Trim(CStr(wsPacientes.Cells(filaPaciente, 1).Value)) ' Columna A: ID
nombrePaciente = Trim(CStr(wsPacientes.Cells(filaPaciente, 2).Value)) ' Columna B: Nombre
identificacionPaciente = Trim(CStr(wsPacientes.Cells(filaPaciente, 3).Value)) ' Columna C: Identificación
' --------------------------------------------------------------------------
' ENCONTRAR PRIMERA FILA COMPLETAMENTE LIBRE EN LA HOJA 'CITAS'
' --------------------------------------------------------------------------
filaDestino = 2
Do While wsCitas.Cells(filaDestino, "A").Value <> "" _
Or wsCitas.Cells(filaDestino, "B").Value <> "" _
Or wsCitas.Cells(filaDestino, "C").Value <> ""
filaDestino = filaDestino + 1
Loop
' --------------------------------------------------------------------------
' PASOS 3 Y 4: GUARDAR DATOS EN LA HOJA 'CITAS'
' Col A: ID (CIT-001)
' Col B: ID_PACIENTE
' Col C: NOMBRE
' Col D: IDENTIFICACION
' Col E: FECHA_CITA
' Col F: HORA
' Col G: OBSERVACIONES (Se omite / Vacío)
' Col H: ESTADO ("Pendiente")
' --------------------------------------------------------------------------
With wsCitas
' Columna A: ID Cita
.Cells(filaDestino, 1).NumberFormat = "@"
.Cells(filaDestino, 1).Value = nuevoIDCita
' Columna B: ID_PACIENTE
.Cells(filaDestino, 2).NumberFormat = "@"
.Cells(filaDestino, 2).Value = idPaciente
' Columna C: NOMBRE
.Cells(filaDestino, 3).Value = nombrePaciente
' Columna D: IDENTIFICACION (Garantiza conservar ceros iniciales)
.Cells(filaDestino, 4).NumberFormat = "@"
.Cells(filaDestino, 4).Value = identificacionPaciente
' Columna E: FECHA_CITA
.Cells(filaDestino, 5).NumberFormat = "dd/mm/yyyy"
If IsDate(fechaCita) Then
.Cells(filaDestino, 5).Value = CDate(fechaCita)
Else
.Cells(filaDestino, 5).Value = fechaCita
End If
' Columna F: HORA
.Cells(filaDestino, 6).NumberFormat = "hh:mm AM/PM"
.Cells(filaDestino, 6).Value = horaCita
' Columna G: OBSERVACIONES
.Cells(filaDestino, 7).Value = ""
' Columna H: ESTADO
.Cells(filaDestino, 8).Value = "Pendiente"
End With
' --------------------------------------------------------------------------
' PASO 5: LIMPIAR EL FORMULARIO
' Usar .Value = "" en celdas combinadas evita el Error 1004
' y preserva la validación de datos (listas desplegables) y formatos.
' --------------------------------------------------------------------------
wsHome.Range("C15").Value = "" ' Paciente (C15:D15)
wsHome.Range("C16").Value = "" ' Fecha de la Cita (C16:D16)
wsHome.Range("C17").Value = "" ' Hora (C17:D17)
' Posicionar el cursor en el campo del paciente
wsHome.Activate
wsHome.Range("C15").Select
' Reactivar la pantalla
Application.ScreenUpdating = True
' Confirmación al usuario
MsgBox "¡Cita registrada exitosamente!" & vbCrLf & _
"ID Cita: " & nuevoIDCita & vbCrLf & _
"Paciente: " & nombrePaciente & vbCrLf & _
"Estado: Pendiente", vbInformation, "Registro Completado"
End Sub
5. Código VBA: Asignar la macro al botón Registrar cita
- Regresa a la hoja Home y haz clic derecho sobre el botón Registrar cita.
- Selecciona Asignar macro.
- Busca y selecciona la macro RegistrarCita y haz clic en Aceptar.
- Guarda los cambios del archivo.
¡Listo! Ahora puedes seleccionar un paciente, ingresar la fecha y la hora, y hacer clic en Registrar cita para guardar la información automáticamente en la hoja Citas.
Completar y editar citas médicas en Excel
En esta sección crearemos un formulario para consultar y editar las citas registradas, cambiar la fecha y la hora, agregar observaciones y actualizar el estado de Pendiente a Completado cuando la cita haya sido atendida.
🎨 Paso 1: Diseñar el formulario para editar citas
En la hoja Home, debajo de los formularios anteriores, vamos a diseñar un nuevo formulario para consultar y editar las citas registradas.
- Agrega un título al formulario: Completar o editar citas.
- Crea el campo ID de la cita y añade un botón llamado Buscar para localizar la cita que deseas modificar.
- Agrega los campos donde se mostrarán los datos de la cita: Nombre del paciente, Fecha, Hora, Estado y Observaciones.
- Añade un botón llamado Guardar para aplicar los cambios realizados en la cita.
- Personaliza los colores, bordes y tamaños para mantener un diseño ordenado y consistente con los formularios anteriores.
💡 Consejo: Por ahora, solo estamos diseñando el formulario. En los siguientes pasos configuraremos el código VBA para que los botones permitan buscar y guardar los cambios.
🤖 Paso 2: Generar el código VBA para buscar una cita
Primero, utilizaremos Gemini para generar el código que permitirá consultar las citas registradas.
En el prompt, indica que el código debe buscar una cita en la hoja Citas mediante el ID que ingresaremos en el formulario y mostrar los siguientes datos: Nombre del paciente, Fecha, Hora, Estado y Observaciones.
💾 Paso 3: Generar el código VBA para actualizar una cita
Ahora pediremos a Gemini que genere un segundo código para guardar los cambios realizados en el formulario.
Indica que debe actualizar la información de la cita correspondiente en la tabla de la hoja Citas, utilizando su ID como referencia y guardando los cambios en los campos Fecha_Cita, Hora, Estado y Observaciones, sin modificar los datos del paciente ni el ID de la cita.
💻 Paso 4: Crear el módulo y pegar los códigos VBA
Una vez que tengamos los dos códigos, vamos a incorporarlos en Excel.
- Presiona Alt + F11 para abrir Visual Basic. También puedes ingresar desde Programador → Visual Basic.
- En el panel Proyecto, haz clic derecho en un espacio en blanco y selecciona Insertar → Módulo.
- En la ventana Propiedades, cambia el nombre del módulo a
Actualizar_Citas. - Copia y pega dentro del módulo los dos códigos generados por Gemini: el de búsqueda y el de actualización.
- Guarda los cambios del archivo.
Option Explicit
' ==============================================================================
' MÓDULO DE BÚSQUEDA DE CITAS - EXCEL VBA
' Este código lee el ID ingresado en la celda G15 de la hoja "Home",
' busca la coincidencia en la columna A de la hoja "Citas"
' y carga los datos correspondientes en el formulario "Completar Citas".
' ==============================================================================
Sub BuscarCita()
' Variables para hojas de trabajo
Dim wsHome As Worksheet
Dim wsCitas As Worksheet
' Variables de búsqueda
Dim idBuscado As String
Dim ultimaFila As Long
Dim i As Long
Dim citaEncontrada As Boolean
Dim filaCita As Long
' Desactivar actualización de pantalla para una ejecución fluida
Application.ScreenUpdating = False
' --------------------------------------------------------------------------
' COMPROBACIÓN DE HOJAS
' --------------------------------------------------------------------------
On Error Resume Next
Set wsHome = ThisWorkbook.Sheets("Home")
Set wsCitas = ThisWorkbook.Sheets("Citas")
On Error GoTo 0
If wsHome Is Nothing Or wsCitas Is Nothing Then
MsgBox "No se encontraron las hojas 'Home' o 'Citas'." & vbCrLf & _
"Por favor verifica los nombres de las pestañas en Excel.", vbCritical, "Hoja No Encontrada"
Application.ScreenUpdating = True
Exit Sub
End If
' --------------------------------------------------------------------------
' PASO 1: LEER Y VALIDAR EL ID BÚSCADO
' --------------------------------------------------------------------------
idBuscado = Trim(CStr(wsHome.Range("G15").Value))
If idBuscado = "" Then
MsgBox "Por favor ingresa el ID de la Cita en la celda G15 para realizar la búsqueda.", vbExclamation, "Campo Requerido"
wsHome.Activate
wsHome.Range("G15").Select
Application.ScreenUpdating = True
Exit Sub
End If
' --------------------------------------------------------------------------
' PASO 2: BUSCAR EL ID EN LA COLUMNA A DE LA HOJA 'CITAS'
' --------------------------------------------------------------------------
ultimaFila = wsCitas.Cells(wsCitas.Rows.Count, "A").End(xlUp).Row
citaEncontrada = False
For i = 2 To ultimaFila
' Compara sin importar mayúsculas o minúsculas
If UCase(Trim(CStr(wsCitas.Cells(i, 1).Value))) = UCase(idBuscado) Then
filaCita = i
citaEncontrada = True
Exit For
End If
Next i
' Si no se encuentra la cita
If Not citaEncontrada Then
' Limpiar los campos del formulario
wsHome.Range("G16").Value = "" ' Paciente
wsHome.Range("G17").Value = "" ' Fecha
wsHome.Range("G18").Value = "" ' Hora
wsHome.Range("G19").Value = "" ' Estado
wsHome.Range("F21").Value = "" ' Observaciones
MsgBox "No se encontró ninguna cita con el ID: " & idBuscado, vbExclamation, "Cita No Encontrada"
wsHome.Activate
wsHome.Range("G15").Select
Application.ScreenUpdating = True
Exit Sub
End If
' --------------------------------------------------------------------------
' PASO 3: TRAER LA INFORMACIÓN DE LA HOJA 'CITAS' AL FORMULARIO
' --------------------------------------------------------------------------
With wsHome
' Paciente: Columna C -> Celda G16 (G16:H16)
.Range("G16").Value = wsCitas.Cells(filaCita, 3).Value
' Fecha: Columna E -> Celda G17 (G17:H17)
.Range("G17").NumberFormat = "dd/mm/yyyy"
If IsDate(wsCitas.Cells(filaCita, 5).Value) Then
.Range("G17").Value = CDate(wsCitas.Cells(filaCita, 5).Value)
Else
.Range("G17").Value = wsCitas.Cells(filaCita, 5).Value
End If
' Hora: Columna F -> Celda G18 (G18:H18)
.Range("G18").NumberFormat = "hh:mm AM/PM"
.Range("G18").Value = wsCitas.Cells(filaCita, 6).Value
' Estado: Columna H -> Celda G19 (G19:H19)
.Range("G19").Value = wsCitas.Cells(filaCita, 8).Value
' Observaciones: Columna G -> Celda F21 (F21:G24)
.Range("F21").Value = wsCitas.Cells(filaCita, 7).Value
End With
' Restablecer pantalla y confirmar al usuario
Application.ScreenUpdating = True
MsgBox "Cita encontrada con éxito. Datos cargados en el formulario.", vbInformation, "Búsqueda Completada"
End Sub
' ==============================================================================
' MÓDULO DE ACTUALIZACIÓN DE CITAS - EXCEL VBA
' Este código toma el ID de la cita en la celda G15 de la hoja "Home",
' busca la fila correspondiente en la hoja "Citas" y actualiza la Fecha (Col E),
' Hora (Col F), Observaciones (Col G) y Estado (Col H).
' Finalmente, limpia todos los campos del formulario "Completar Citas".
' ==============================================================================
Sub ActualizarCita()
' Variables para hojas de trabajo
Dim wsHome As Worksheet
Dim wsCitas As Worksheet
' Variables de búsqueda y lectura
Dim idBuscado As String
Dim ultimaFila As Long
Dim i As Long
Dim citaEncontrada As Boolean
Dim filaCita As Long
' Variables de campos a actualizar
Dim fechaActualizada As Variant
Dim horaActualizada As Variant
Dim estadoActualizado As String
Dim observacionesActualizadas As String
' Desactivar actualización de pantalla para una ejecución fluida
Application.ScreenUpdating = False
' --------------------------------------------------------------------------
' COMPROBACIÓN DE HOJAS
' --------------------------------------------------------------------------
On Error Resume Next
Set wsHome = ThisWorkbook.Sheets("Home")
Set wsCitas = ThisWorkbook.Sheets("Citas")
On Error GoTo 0
If wsHome Is Nothing Or wsCitas Is Nothing Then
MsgBox "No se encontraron las hojas 'Home' o 'Citas'." & vbCrLf & _
"Por favor verifica los nombres de las pestañas en Excel.", vbCritical, "Hoja No Encontrada"
Application.ScreenUpdating = True
Exit Sub
End If
' --------------------------------------------------------------------------
' PASO 1: LEER Y VALIDAR EL ID Y CAMPOS A GUARDAR
' --------------------------------------------------------------------------
idBuscado = Trim(CStr(wsHome.Range("G15").Value))
If idBuscado = "" Then
MsgBox "Por favor busca o ingresa primero el ID de la Cita en la celda G15 antes de guardar cambios.", vbExclamation, "ID Requerido"
wsHome.Activate
wsHome.Range("G15").Select
Application.ScreenUpdating = True
Exit Sub
End If
' Lectura de valores editados desde el formulario en 'Home'
fechaActualizada = wsHome.Range("G17").Value
horaActualizada = wsHome.Range("G18").Value
estadoActualizado = Trim(CStr(wsHome.Range("G19").Value))
observacionesActualizadas = Trim(CStr(wsHome.Range("F21").Value))
' --------------------------------------------------------------------------
' PASO 2: BUSCAR LA CITA EN LA HOJA 'CITAS' (COLUMNA A)
' --------------------------------------------------------------------------
ultimaFila = wsCitas.Cells(wsCitas.Rows.Count, "A").End(xlUp).Row
citaEncontrada = False
For i = 2 To ultimaFila
If UCase(Trim(CStr(wsCitas.Cells(i, 1).Value))) = UCase(idBuscado) Then
filaCita = i
citaEncontrada = True
Exit For
End If
Next i
If Not citaEncontrada Then
MsgBox "No se encontró la cita con ID '" & idBuscado & "' en la base de datos para actualizar.", vbCritical, "Error de Actualización"
Application.ScreenUpdating = True
Exit Sub
End If
' --------------------------------------------------------------------------
' PASO 3: ACTUALIZAR LOS DATOS EN LA HOJA 'CITAS'
' Columna E: FECHA_CITA
' Columna F: HORA
' Columna G: OBSERVACIONES
' Columna H: ESTADO
' (No se modifican ni Columna A: ID, ni Columna B: ID_PACIENTE, ni Columna C: NOMBRE, ni Columna D: IDENTIFICACION)
' --------------------------------------------------------------------------
With wsCitas
' Fecha (Columna E)
.Cells(filaCita, 5).NumberFormat = "dd/mm/yyyy"
If IsDate(fechaActualizada) Then
.Cells(filaCita, 5).Value = CDate(fechaActualizada)
Else
.Cells(filaCita, 5).Value = fechaActualizada
End If
' Hora (Columna F)
.Cells(filaCita, 6).NumberFormat = "hh:mm AM/PM"
.Cells(filaCita, 6).Value = horaActualizada
' Observaciones (Columna G)
.Cells(filaCita, 7).Value = observacionesActualizadas
' Estado (Columna H)
.Cells(filaCita, 8).Value = estadoActualizado
End With
' --------------------------------------------------------------------------
' PASO 4: LIMPIAR TODO EL FORMULARIO
' Asignar .Value = "" respeta celdas combinadas, validaciones y formatos de celda
' --------------------------------------------------------------------------
wsHome.Range("G15").Value = "" ' ID Cita
wsHome.Range("G16").Value = "" ' Paciente (G16:H16)
wsHome.Range("G17").Value = "" ' Fecha (G17:H17)
wsHome.Range("G18").Value = "" ' Hora (G18:H18)
wsHome.Range("G19").Value = "" ' Estado (G19:H19)
wsHome.Range("F21").Value = "" ' Observaciones (F21:G24)
' Colocar el cursor de vuelta en la casilla del ID
wsHome.Activate
wsHome.Range("G15").Select
Application.ScreenUpdating = True
' Confirmación al usuario
MsgBox "¡Cita " & idBuscado & " actualizada exitosamente!", vbInformation, "Actualización Completada"
End Sub
🖱️ Paso 5: Asignar las macros a los botones
Ahora vincularemos cada código con el botón correspondiente del formulario.
- Haz clic derecho sobre el botón Buscar y selecciona Asignar macro. Elige
BuscarCitay haz clic en Aceptar. - Haz clic derecho sobre el botón Guardar y selecciona Asignar macro. Elige
ActualizarCitay haz clic en Aceptar.
✅ Paso 6: Probar el formulario
- Ingresa el ID de una cita existente y haz clic en Buscar.
- Verifica que se muestren correctamente el nombre del paciente, la fecha, la hora, el estado y las observaciones.
- Modifica la fecha, la hora, el estado o las observaciones y haz clic en Guardar.
- Comprueba en la hoja Citas que los cambios se hayan guardado correctamente.
¡Listo! Ya puedes consultar, completar y actualizar las citas médicas desde el formulario.
Filtrar y gestionar citas médicas desde la hoja Home
En esta última sección crearemos un panel en la hoja Home para visualizar las citas médicas, mostrando únicamente los últimos 20 registros. Además, agregaremos dos botones, Pendientes y Completadas, para filtrar las citas según su estado y facilitar su gestión desde una sola hoja.
🎨 Diseñar el panel de citas en la hoja Home
- En la hoja Home, crea un espacio para mostrar la tabla de citas médicas.
- Agrega todas las columnas de la hoja Citas, respetando el mismo orden: ID, ID_Paciente, Nombre, Identificacion, Fecha_Cita, Hora, Observaciones y Estado.
- Diseña el panel con un título y ajusta los anchos de las columnas para que la información se visualice correctamente.
- Agrega dos botones: Pendientes y Completadas, que utilizaremos posteriormente para filtrar las citas según su estado.
- Personaliza los colores, bordes y tamaños para mantener el diseño consistente con el resto del sistema.
💡 Consejo: Deja suficiente espacio para mostrar los 20 registros más recientes sin que la tabla interfiera con los demás formularios de la hoja Home.
🤖 Crear los códigos VBA para filtrar las citas con Gemini
En este paso utilizaremos Gemini para generar los códigos que permitirán mostrar y filtrar las citas médicas directamente desde la hoja Home.
En el prompt, debemos indicarle a la IA que genere dos macros:
- Filtrar citas pendientes: Mostrar únicamente las citas cuyo estado sea
Pendiente. - Filtrar citas completadas: Mostrar únicamente las citas cuyo estado sea
Completado.
Además, ambos códigos deben cumplir con estas indicaciones:
- Consultar los datos de la hoja Citas.
- Mostrar únicamente los últimos 20 registros.
- Ordenar las citas desde la más reciente registrada hasta la más antigua, colocando siempre el último registro en la primera fila del panel.
- Mostrar todas las columnas: ID, ID_Paciente, Nombre, Identificacion, Fecha_Cita, Hora, Observaciones y Estado.
- Colocar los resultados en el panel diseñado en la hoja Home, sin modificar la tabla original de la hoja Citas.
Una vez que Gemini genere los códigos, cópialos para incorporarlos a nuestro proyecto de VBA y después asignaremos cada macro a su botón correspondiente.
💡 Consejo: Asegúrate de especificar en el prompt las celdas donde comienza el panel en la hoja Home, para que la IA coloque los resultados en el lugar correcto.
Option Explicit
' ==============================================================================
' MÓDULO DE FILTRADO Y CONSULTA DE CITAS - EXCEL VBA
' Este módulo permite filtrar los últimos 20 registros de la base de datos "Citas"
' según su estado ("Pendiente" o "Completada/Completadas"), los ordena desde el más
' reciente hacia atrás y los pega en la hoja "Home" a partir de la celda J4.
' ==============================================================================
' STREAMING_CHUNK:Defining public procedures for macro buttons...
' ------------------------------------------------------------------------------
' MACRO PARA EL BOTÓN "PENDIENTES"
' Asigna esta macro al botón de ver citas pendientes.
' ------------------------------------------------------------------------------
Sub MostrarPendientes()
Call FiltrarCitasPorEstado("Pendiente")
End Sub
' ------------------------------------------------------------------------------
' MACRO PARA EL BOTÓN "COMPLETADAS"
' Asigna esta macro al botón de ver citas completadas.
' ------------------------------------------------------------------------------
Sub MostrarCompletadas()
Call FiltrarCitasPorEstado("Completada")
End Sub
' STREAMING_CHUNK:Implementing core filtering logic...
' ------------------------------------------------------------------------------
' PROCEDIMIENTO GENERAL DE FILTRADO (PRIVADO)
' ------------------------------------------------------------------------------
Private Sub FiltrarCitasPorEstado(ByVal estadoBuscado As String)
' Variables para las hojas de trabajo
Dim wsHome As Worksheet
Dim wsCitas As Worksheet
' Variables para control de filas y contadores
Dim ultimaFila As Long
Dim i As Long
Dim contador As Long
Dim filaDestino As Long
Dim estadoActual As String
' Desactivar actualización de pantalla para un parpadeo cero y ejecución ultrarrápida
Application.ScreenUpdating = False
' STREAMING_CHUNK:Verifying worksheet availability...
On Error Resume Next
Set wsHome = ThisWorkbook.Sheets("Home")
Set wsCitas = ThisWorkbook.Sheets("Citas")
On Error GoTo 0
If wsHome Is Nothing Or wsCitas Is Nothing Then
MsgBox "No se encontraron las hojas 'Home' o 'Citas'." & vbCrLf & _
"Verifica que los nombres de las pestañas estén correctos.", vbCritical, "Error de Hoja"
Application.ScreenUpdating = True
Exit Sub
End If
' STREAMING_CHUNK:Clearing target range J4:Q...
' Limpiar resultados anteriores en la tabla de Home (J4:Q100) sin alterar los estilos visuales
wsHome.Range("J4:Q100").ClearContents
' STREAMING_CHUNK:Scanning Citas sheet from bottom to top...
' Obtener la última fila con datos en la hoja 'Citas'
ultimaFila = wsCitas.Cells(wsCitas.Rows.Count, "A").End(xlUp).Row
filaDestino = 4 ' Iniciar el pegado exactamente en la fila 4 (J4)
contador = 0
' Recorrer de ABAJO hacia ARRIBA para tomar siempre los registros MÁS RECIENTES primero
For i = ultimaFila To 2 Step -1
estadoActual = UCase(Trim(CStr(wsCitas.Cells(i, 8).Value)))
' Verificar si coincide con el estado buscado (Soporta "Pendiente", "Completada", "Completadas")
If InStr(1, estadoActual, UCase(estadoBuscado), vbTextCompare) > 0 Or _
(UCase(estadoBuscado) = "COMPLETADA" And InStr(1, estadoActual, "COMPLETAD", vbTextCompare) > 0) Then
' STREAMING_CHUNK:Copying row data preserving cell formats...
With wsHome
' Columna J: ID Cita (Col A en Citas)
.Cells(filaDestino, "J").NumberFormat = "@"
.Cells(filaDestino, "J").Value = wsCitas.Cells(i, 1).Value
' Columna K: ID Paciente (Col B en Citas)
.Cells(filaDestino, "K").NumberFormat = "@"
.Cells(filaDestino, "K").Value = wsCitas.Cells(i, 2).Value
' Columna L: Nombre (Col C en Citas)
.Cells(filaDestino, "L").Value = wsCitas.Cells(i, 3).Value
' Columna M: Identificación (Col D en Citas - conserva ceros a la izquierda)
.Cells(filaDestino, "M").NumberFormat = "@"
.Cells(filaDestino, "M").Value = CStr(wsCitas.Cells(i, 4).Value)
' Columna N: Fecha Cita (Col E en Citas)
.Cells(filaDestino, "N").NumberFormat = "dd/mm/yyyy"
If IsDate(wsCitas.Cells(i, 5).Value) Then
.Cells(filaDestino, "N").Value = CDate(wsCitas.Cells(i, 5).Value)
Else
.Cells(filaDestino, "N").Value = wsCitas.Cells(i, 5).Value
End If
' Columna O: Hora Cita (Col F en Citas)
.Cells(filaDestino, "O").NumberFormat = "hh:mm AM/PM"
.Cells(filaDestino, "O").Value = wsCitas.Cells(i, 6).Value
' Columna P: Observaciones (Col G en Citas)
.Cells(filaDestino, "P").Value = wsCitas.Cells(i, 7).Value
' Columna Q: Estado (Col H en Citas)
.Cells(filaDestino, "Q").Value = wsCitas.Cells(i, 8).Value
End With
filaDestino = filaDestino + 1
contador = contador + 1
' Detener el ciclo tan pronto como obtengamos los últimos 20 registros
If contador >= 20 Then Exit For
End If
Next i
' STREAMING_CHUNK:Restoring screen updating and completing task...
' Reactivar la pantalla
Application.ScreenUpdating = True
' Mensaje informativo si no se encontraron registros
If contador = 0 Then
MsgBox "No se encontraron citas con el estado '" & estadoBuscado & "'.", vbInformation, "Sin Citas Encontradas"
End If
End Sub
💻 Crear el módulo y pegar los códigos VBA
Una vez que tengamos los códigos generados por Gemini, vamos a incorporarlos en Excel.
- Presiona Alt + F11 para abrir Visual Basic. También puedes ingresar desde Programador → Visual Basic.
- En el panel Proyecto, haz clic derecho en un espacio en blanco y selecciona Insertar → Módulo.
- En la ventana Propiedades, cambia el nombre del módulo a
FiltrarCitas. - Copia y pega los códigos generados por Gemini dentro del módulo y guarda los cambios.
🖱️ Asignar las macros a los botones
Ahora vincularemos cada macro con su botón correspondiente en la hoja Home.
- Haz clic derecho sobre el botón Pendientes y selecciona Asignar macro.
- Selecciona
MostrarPendientesy haz clic en Aceptar. - Haz clic derecho sobre el botón Completadas y selecciona Asignar macro.
- Selecciona
MostrarCompletadasy haz clic en Aceptar.
✅ Probar los filtros
Haz clic en cada botón para comprobar que se muestren las citas correspondientes a su estado, ordenadas desde la más reciente hasta la más antigua y limitadas a los últimos 20 registros.
¡Listo! Ahora podrás gestionar y filtrar las citas médicas directamente desde la hoja Home.




