Poductividad con Excel

Aprende Excel resolviendo problemas reales de ingeniería industrial. Cada artículo te guía desde cero con datos reales, fórmulas explicadas y ejercicios prácticos diseñados para que apliques lo que aprendes en clase.

Automatización del cálculo de OEE con macros en Excel: Guía completa

Automatización del cálculo de OEE con macros en Excel: Guía completa

Palabra clave principal: Automatización del cálculo de OEE con macros en Excel

El Overall Equipment Effectiveness (OEE) es el indicador clave de rendimiento (KPI) más importante en la manufactura moderna. Mide la eficiencia real de un equipo de producción al integrar tres factores: Disponibilidad, Rendimiento y Calidad. Calcularlo manualmente, especialmente cuando se manejan múltiples turnos, productos y fallos, es tedioso y propenso a errores. Esta guía te mostrará cómo transformar este proceso manual en un sistema automatizado utilizando las capacidades de VBA (Macros) de Excel.

Definición del problema

Contexto Industrial: Somos una planta de ensamblaje de componentes electrónicos. Cada día, múltiples líneas de producción (Línea A, Línea B) procesan diferentes modelos de placas (Modelo X, Modelo Y). Los datos brutos se registran manualmente al final de cada turno: tiempo de operación planificado, tiempo de parada por mantenimiento, tiempo de parada por avería, cantidad producida y cantidad rechazada.

El Reto Operativo: El analista de producción debe tomar estos datos dispersos (registrados en hojas de registro de turno) y calcular el OEE diario para cada línea y modelo. El cálculo requiere:

  1. Calcular la Disponibilidad: (Tiempo Operativo / Tiempo Planificado).
  2. Calcular el Rendimiento: (Producción Real / Tiempo Operativo) / Tiempo Ideal.
  3. Calcular la Calidad: (Piezas Buenas / Producción Real).
  4. Calcular OEE: Disponibilidad × Rendimiento × Calidad.

Este proceso consume tiempo valioso y, si se cometen errores de transcripción o fórmula, la toma de decisiones gerenciales se basa en datos incorrectos.

Explicación técnica

Para automatizar esto, utilizaremos una combinación de herramientas de Excel, siendo la Macro (VBA) el motor principal. La lógica matemática subyacente es la siguiente:

  • Disponibilidad (A):
  • Rendimiento (R):
  • Calidad (Q):
  • OEE: $OEE = A times R times Q$

La macro VBA se encargará de:

  1. Leer los datos de las hojas de registro (Input).
  2. Aplicar las fórmulas de cálculo de manera iterativa para cada registro.
  3. Escribir los resultados finales (OEE, A, R, Q) en una hoja de resumen (Output).

Aunque las fórmulas de Excel son suficientes para el cálculo, la macro es necesaria para la automatización del flujo de trabajo: hacer clic en un botón y que todo el proceso se ejecute sin intervención manual.

Guía paso a paso

Paso 1: Configuración de la Hoja de Datos de Entrada (Input)

Debemos crear una hoja donde se ingresen los datos brutos de cada turno. Crearemos una hoja llamada «Registros».

Acción: En la hoja «Registros», configura los siguientes encabezados en la Fila 1:

  • A1: Fecha
  • B1: Línea de Producción
  • C1: Modelo
  • D1: Tiempo Planificado (Horas)
  • E1: Tiempo de Parada (Minutos)
  • F1: Producción Total (Unidades)
  • G1: Piezas Rechazadas (Unidades)

Por qué: Esto estandariza la entrada de datos, permitiendo que la macro sepa exactamente dónde buscar cada variable.

Resultado: Una tabla lista para recibir datos brutos.

ABCDEFG
1FechaLíneaModeloPlanificado (h)Paradas (min)Producción TotalRechazados
201/05/2024AX83048024
301/05/2024BY86035010

Paso 2: Creación de la Hoja de Resultados (Output)

Creamos una hoja llamada «ResumenOEE». Aquí se mostrarán los KPIs calculados.

Acción: Configura los encabezados en la Fila 1 de «ResumenOEE»:

  • A1: Fecha
  • B1: Línea
  • C1: Modelo
  • D1: Disponibilidad (%)
  • E1: Rendimiento (%)
  • F1: Calidad (%)
  • G1: OEE (%)

Por qué: Separa los datos crudos de los resultados analíticos, manteniendo la integridad del reporte.

Paso 3: Implementación de la Macro (VBA)

Este es el núcleo de la automatización. Necesitamos que la macro itere sobre cada fila de «Registros» y calcule los valores.

Acción:

  1. Presiona ALT + F11 para abrir el Editor de VBA.
  2. En el menú, ve a Insertar > Módulo.
  3. Pega el siguiente código (simplificado para el ejemplo):

Sub CalcularOEE()
    Dim wsInput As Worksheet
    Dim wsOutput As Worksheet
    Dim ultimaFila As Long
    Dim i As Long
    
    Set wsInput = ThisWorkbook.Sheets("Registros")
    Set wsOutput = ThisWorkbook.Sheets("ResumenOEE")
    
    ' Encontrar la última fila con datos en la hoja de entrada
    ultimaFila = wsInput.Cells(Rows.Count, "A").End(xlUp).Row
    
    ' Limpiar resultados anteriores
    wsOutput.UsedRange.ClearContents
    
    ' Iterar desde la fila 2 (asumiendo que la fila 1 son encabezados)
    For i = 2 To ultimaFila
        
        ' --- 1. Cálculos ---
        Dim tiempoPlanificadoHoras As Double
        Dim tiempoParadaMinutos As Double
        Dim produccionTotal As Long
        Dim piezasRechazadas As Long
        
        tiempoPlanificadoHoras = wsInput.Cells(i, 4).Value ' Columna D
        tiempoParadaMinutos = wsInput.Cells(i, 5).Value  ' Columna E
        produccionTotal = wsInput.Cells(i, 6).Value      ' Columna F
        piezasRechazadas = wsInput.Cells(i, 7).Value     ' Columna G
        
        ' Tiempo Operativo (en horas) = (Planificado * 60 - Paradas) / 60
        Dim tiempoOperativoHoras As Double
        tiempoOperativoHoras = ((tiempoPlanificadoHoras * 60) - tiempoParadaMinutos) / 60
        
        ' Disponibilidad (A)
        Dim disponibilidad As Double
        disponibilidad = tiempoOperativoHoras / tiempoPlanificadoHoras
        
        ' Calidad (Q)
        Dim calidad As Double
        Dim piezasBuenas As Long
        piezasBuenas = produccionTotal - piezasRechazadas
        calidad = piezasBuenas / produccionTotal
        
        ' Rendimiento (R) - Simplificado: (Producción Real / Tiempo Operativo) / Tasa Ideal
        ' Asumimos una Tasa Ideal de 10 unidades/hora para este ejemplo
        Dim tasaIdeal As Double
        tasaIdeal = 10
        Dim rendimiento As Double
        rendimiento = (produccionTotal / tiempoOperativoHoras) / tasaIdeal
        
        ' OEE
        Dim oee As Double
        oee = disponibilidad * rendimiento * calidad
        
        ' --- 2. Escritura en la Hoja de Resumen ---
        wsOutput.Cells(i - 1, 1).Value = wsInput.Cells(i, 1).Value ' Fecha
        wsOutput.Cells(i - 1, 2).Value = wsInput.Cells(i, 2).Value ' Línea
        wsOutput.Cells(i - 1, 3).Value = wsInput.Cells(i, 3).Value ' Modelo
        wsOutput.Cells(i - 1, 4).Value = disponibilidad
        wsOutput.Cells(i - 1, 5).Value = rendimiento
        wsOutput.Cells(i - 1, 6).Value = calidad
        wsOutput.Cells(i - 1, 7).Value = oee
        
    Next i
    
    MsgBox "Cálculo de OEE completado exitosamente.", vbInformation
End Sub

Por qué: El bucle For i = 2 To ultimaFila asegura que cada registro de entrada sea procesado individualmente. Las variables temporales almacenan los resultados intermedios (A, R, Q) antes de calcular el OEE final.

Resultado: La hoja «ResumenOEE» se llenará automáticamente con los valores calculados, listos para ser graficados.

Paso 4: Creación del Botón de Ejecución

Para que el proceso sea verdaderamente automatizado, no queremos ejecutar el código desde el editor de VBA. Necesitamos un disparador visual.

Acción:

  1. Ve a la pestaña «Desarrollador» (si no la tienes, actívala en Opciones > Personalizar cinta de opciones).
  2. En el grupo «Controles», haz clic en «Insertar» y selecciona un «Botón de Formulario».
  3. Dibuja el botón en la hoja «Registros».
  4. Cuando aparezca la ventana «Asignar macro», selecciona CalcularOEE y haz clic en Aceptar.
  5. Cambia el texto del botón a «Calcular OEE».

Por qué: Esto encapsula la lógica compleja en una acción simple y repetible para el usuario final.

Resultado: Un botón funcional que, al ser presionado, ejecuta toda la lógica de cálculo y actualiza la hoja «ResumenOEE».

Ejercicio propuesto

Una vez que domines el cálculo básico, extiende el modelo para manejar la variación de la Tasa Ideal. En el código VBA, actualmente asumimos una tasaIdeal = 10. Modifica la macro para que la Tasa Ideal sea un parámetro que se ingrese en una celda específica de la hoja «Registros» (ej. Celda H1). Además, agrega una columna en la hoja «ResumenOEE» para mostrar la Pérdida de Rendimiento (Producción Ideal – Producción Real).

Esto te obligará a refactorizar la macro para leer un valor dinámico en lugar de un valor codificado.

Errores habituales

Al trabajar con macros y cálculos de eficiencia, es común caer en trampas lógicas o de implementación. Aquí te presentamos tres errores frecuentes:

  1. Error: División por Cero (Tiempo Operativo = 0). Si un turno tiene 0 tiempo planificado o si el tiempo de parada es igual al tiempo planificado, la macro intentará dividir por cero, deteniéndose con un error de tiempo de ejecución.

    Solución: Implementa una verificación condicional (If tiempoOperativoHoras = 0 Then ...) antes de realizar cualquier división. Si es cero, asigna OEE = 0 y continúa al siguiente registro.
  2. Error: Referencias Absolutas Incorrectas. Al copiar y pegar código, es fácil olvidar fijar rangos (usar $A$1 en lugar de A1) cuando se trabaja con bucles. Si no fijas las celdas de encabezado, la macro podría empezar a leer datos de la fila 1 en lugar de los encabezados.

    Solución: Asegúrate de que todas las referencias a encabezados o constantes (como la Tasa Ideal) utilicen referencias absolutas ($).
  3. Error: No Limpiar Resultados Previos. Si ejecutas la macro varias veces sin borrar el contenido de la hoja «ResumenOEE», los nuevos cálculos se añadirán debajo de los antiguos, creando un reporte confuso y duplicado.

    Solución: Incluye siempre una línea al inicio de la macro, como wsOutput.UsedRange.ClearContents, para asegurar que el reporte comience siempre limpio.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *