Cómo Crear un Sistema de Citas Médicas en Excel con Macros VBA e IA (Sin Saber Programar)

Cómo Crear un Sistema de Citas Médicas en Excel con Macros VBA e IA (Sin Saber Programar)
Aplicaciones Creadas•Excel•Plantillas Gratis

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)

Plantilla de Citas Médicas en Google Sheets para Gestionar tu Consultorio Médico | AT-Citas Médicas 002

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

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

Paso 2: Crear el libro de Excel

Dentro de la carpeta creada:

  1. Haz clic derecho en un espacio vacío.
  2. Selecciona Nuevo → Hoja de cálculo de Microsoft Excel.
  3. No necesitas darle un nombre todavía

Paso 3: Guardar el archivo de Excel habilitado para macros

Paso 3: Guardar el archivo de Excel habilitado para macros
  1. Ve a Archivo → Guardar como → Examinar.
  2. Busca y selecciona la carpeta Citas Médicas Plantilla.
  3. En el apartado “Tipo”, selecciona Libro de Excel habilitado para macros (*.xlsm).
  4. Cambia el nombre del archivo a: Citas Médicas Plantilla
  5. 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

Crear las hojas dentro del archivo
  1. En la parte inferior izquierda de Excel, haz clic en el botón “+” para crear una nueva hoja.
  2. Crea las hojas necesarias hasta tener tres en total.
  3. 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?

¿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:

  1. ID
  2. Nombre
  3. Identificacion
  4. Correo
  5. Telefono
  6. Direccion
  7. Fecha_Nacimiento
  8. Genero
  9. Tipo_Sangre
  10. 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

  1. Selecciona las columnas creadas, incluyendo los encabezados.
  2. Ve a Insertar → Tabla.
  3. 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

  1. 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

  1. Selecciona la primera celda de la columna Nombre_Identificacion.
  2. Ve a la pestaña Fórmulas y haz clic en Administrador de nombres.
  3. Selecciona Nuevo.
  4. En el campo Nombre, escribe Nombre.
  5. 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

🎨 Diseño del formulario de 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í:

Formulario de Pacientes en Excel
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

📋 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

  1. Selecciona las celdas C9.
  2. Ve a Datos → Validación de datos.
  3. En Permitir, selecciona Lista.
  4. En el campo Origen, copia y pega estas opciones: Masculino;Femenino;Otro
  5. Haz clic en Aceptar.

2. Configurar la lista de Tipo de Sangre

  1. Selecciona las celdas C10.
  2. Ve a Datos → Validación de datos.
  3. En Permitir, selecciona Lista.
  4. En el campo Origen, copia y pega estas opciones: A+;A-;B+;B-;AB+;AB-;O+;O-
  5. 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

1. Abrir Visual Basic y crear el módulo
  1. En Excel, ve a la pestaña Programador y haz clic en Visual Basic. También puedes abrirlo directamente presionando las teclas Alt + F11.
  2. En el editor de Visual Basic, ubica el panel Proyecto.
  3. Haz clic derecho en un espacio en blanco del panel y selecciona Insertar → Módulo.
  4. 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.

  1. 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.
  2. 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.
  3. 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

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.

  1. En la hoja Home, haz clic derecho sobre el botón Registrar paciente.
  2. Selecciona la opción Asignar macro.
  3. En la lista de macros, selecciona RegistrarPaciente y haz clic en Aceptar.
  4. 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:

  1. ID
  2. ID_Paciente
  3. Nombre
  4. Identificacion
  5. Fecha_Cita
  6. Hora
  7. Observaciones
  8. 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

1. Diseñar el formulario de citas
  1. En la hoja Home, debajo del formulario de pacientes, crea un nuevo formulario.
  2. Agrega los tres campos: Pacientes, Fecha y Hora.
  3. 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.
  4. 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

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.

  1. En la hoja Home, selecciona la celda donde elegirás al paciente.
  2. Ve a Datos → Validación de datos.
  3. En Permitir, selecciona Lista.
  4. En el campo Origen, escribe: =Nombre
  5. 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:

  1. Generar automáticamente un ID único para cada cita.
  2. Buscar al paciente seleccionado en la hoja Pacientes, utilizando el formato Ayleen Aspiazu - CI: 0939887484, y obtener su ID, nombre e identificación.
  3. Copiar la fecha y la hora ingresadas en el formulario y guardarlas en la hoja Citas.
  4. 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.

  1. Presiona Alt + F11 para abrir el editor de Visual Basic. También puedes ingresar desde la pestaña Programador → Visual Basic.
  2. En el panel Proyecto, haz clic derecho en un espacio en blanco y selecciona Insertar → Módulo.
  3. Selecciona el módulo creado y cambia su nombre a Citas desde la ventana Propiedades.
  4. Copia el código generado por Gemini y pégalo dentro del módulo Citas.
  5. 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

  1. Regresa a la hoja Home y haz clic derecho sobre el botón Registrar cita.
  2. Selecciona Asignar macro.
  3. Busca y selecciona la macro RegistrarCita y haz clic en Aceptar.
  4. 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.

  1. Agrega un título al formulario: Completar o editar citas.
  2. Crea el campo ID de la cita y añade un botón llamado Buscar para localizar la cita que deseas modificar.
  3. Agrega los campos donde se mostrarán los datos de la cita: Nombre del paciente, Fecha, Hora, Estado y Observaciones.
  4. Añade un botón llamado Guardar para aplicar los cambios realizados en la cita.
  5. 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

💻 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.

  1. Presiona Alt + F11 para abrir Visual Basic. También puedes ingresar desde Programador → Visual Basic.
  2. En el panel Proyecto, haz clic derecho en un espacio en blanco y selecciona Insertar → Módulo.
  3. En la ventana Propiedades, cambia el nombre del módulo a Actualizar_Citas.
  4. Copia y pega dentro del módulo los dos códigos generados por Gemini: el de búsqueda y el de actualización.
  5. 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.

  1. Haz clic derecho sobre el botón Buscar y selecciona Asignar macro. Elige BuscarCita y haz clic en Aceptar.
  2. Haz clic derecho sobre el botón Guardar y selecciona Asignar macro. Elige ActualizarCita y haz clic en Aceptar.

✅ Paso 6: Probar el formulario

  1. Ingresa el ID de una cita existente y haz clic en Buscar.
  2. Verifica que se muestren correctamente el nombre del paciente, la fecha, la hora, el estado y las observaciones.
  3. Modifica la fecha, la hora, el estado o las observaciones y haz clic en Guardar.
  4. 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

🎨 Diseñar el panel de citas en la hoja Home
  1. En la hoja Home, crea un espacio para mostrar la tabla de citas médicas.
  2. Agrega todas las columnas de la hoja Citas, respetando el mismo orden: ID, ID_Paciente, Nombre, Identificacion, Fecha_Cita, Hora, Observaciones y Estado.
  3. Diseña el panel con un título y ajusta los anchos de las columnas para que la información se visualice correctamente.
  4. Agrega dos botones: Pendientes y Completadas, que utilizaremos posteriormente para filtrar las citas según su estado.
  5. 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:

  1. Filtrar citas pendientes: Mostrar únicamente las citas cuyo estado sea Pendiente.
  2. 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

💻 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.

  1. Presiona Alt + F11 para abrir Visual Basic. También puedes ingresar desde Programador → Visual Basic.
  2. En el panel Proyecto, haz clic derecho en un espacio en blanco y selecciona Insertar → Módulo.
  3. En la ventana Propiedades, cambia el nombre del módulo a FiltrarCitas.
  4. 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.

  1. Haz clic derecho sobre el botón Pendientes y selecciona Asignar macro.
  2. Selecciona MostrarPendientes y haz clic en Aceptar.
  3. Haz clic derecho sobre el botón Completadas y selecciona Asignar macro.
  4. Selecciona MostrarCompletadas y 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.

guest
0 Comentarios
más antiguo
El más nuevo Más votado
Comentarios en línea
Ver todos los comentarios

2026© Cursos Aspiazu | Hecho por Miguel Aspiazu

Scroll al inicio
0
Me encantaría conocer tu opinión, por favor comenta.x