Option Explicit
Sub CalcularSumasAverias()
Dim wsDatos As Worksheet
Dim ultimaFila As Long
Dim fila As Long
Dim AveriaActual As mbv ' <--- ESTO DEBE SER mbv
Dim colTodasAverias As Collection
Set colTodasAverias = New Collection
Dim dicSumasAgrupadas As Object
Set dicSumasAgrupadas = CreateObject("Scripting.Dictionary")
' 1. Definir la hoja de datos
' Asegúrate de que este nombre sea EXACTO como la pestaña de tu hoja
Set wsDatos = ThisWorkbook.Sheets("Mantenimiento No Programado_183") ' ¡ESTE
NOMBRE ES CORRECTO SEGÚN TU ÚLTIMA INFO!
' 2. Encontrar la última fila con datos en la columna A
ultimaFila = wsDatos.Cells(Rows.Count, "A").End(xlUp).Row
' 3. Leer los datos y cargar en objetos (ignorando filas irrelevantes)
For fila = 2 To ultimaFila ' Los datos empiezan en la fila 2
Dim causaCelda As String
causaCelda = Trim(CStr(wsDatos.Cells(fila, 1).Value))
' Criterios para ignorar filas que no son datos individuales de avería:
If causaCelda <> "" And _
Not (InStr(1, causaCelda, "Total") > 0) And _
Not (InStr(1, causaCelda, "Mantenimiento No Programado") > 0) And _
Not (Left(causaCelda, 2) = "CA" And Len(causaCelda) = 6 And
IsNumeric(Mid(causaCelda, 3))) And _
Not (causaCelda = "Causa Avería") Then
Set AveriaActual = New mbv ' <--- ESTO DEBE SER mbv
With AveriaActual
.CausaAveria = causaCelda
' Validar si los valores son numéricos antes de asignar para evitar errores
If IsNumeric(wsDatos.Cells(fila, 2).Value) Then
.CodAveria = CDbl(wsDatos.Cells(fila, 2).Value)
Else
.CodAveria = 0
End If
If IsNumeric(wsDatos.Cells(fila, 3).Value) Then
.TIntervReal = CDbl(wsDatos.Cells(fila, 3).Value)
Else
.TIntervReal = 0
End If
If IsNumeric(wsDatos.Cells(fila, 4).Value) Then
.TParoReal = CDbl(wsDatos.Cells(fila, 4).Value)
Else
.TParoReal = 0
End If
End With
colTodasAverias.Add AveriaActual
End If
Next fila
MsgBox "Se han cargado " & colTodasAverias.Count & " averías individuales para
procesamiento."
' 4. Agrupar y Sumar los datos usando el Diccionario
Dim itemAveria As mbv ' <--- ESTO DEBE SER mbv
Dim arrValoresExistentes As Variant
For Each itemAveria In colTodasAverias
Dim keyCausa As String
keyCausa = itemAveria.CausaAveria
If Not dicSumasAgrupadas.Exists(keyCausa) Then
dicSumasAgrupadas.Add keyCausa, Array(itemAveria.TIntervReal,
itemAveria.TParoReal, 1)
Else
arrValoresExistentes = dicSumasAgrupadas.Item(keyCausa)
arrValoresExistentes(0) = arrValoresExistentes(0) + itemAveria.TIntervReal
arrValoresExistentes(1) = arrValoresExistentes(1) + itemAveria.TParoReal
arrValoresExistentes(2) = arrValoresExistentes(2) + 1
dicSumasAgrupadas.Item(keyCausa) = arrValoresExistentes
End If
Next itemAveria
MsgBox "El procesamiento de datos (agrupación y sumas) ha finalizado." & vbCrLf &
_
"Los resultados están listos en memoria para ser presentados." & vbCrLf & _
"Número de Causas Avería únicas encontradas: " & dicSumasAgrupadas.Count,
vbInformation
' Liberar objetos de memoria
Set wsDatos = Nothing
Set colTodasAverias = Nothing
Set dicSumasAgrupadas = Nothing
Set AveriaActual = Nothing
Set itemAveria = Nothing
End Sub
Conclusiones consolidadas
Ahora podemos refinar nuestras conclusiones basadas en todos los datos disponibles:
1. Fibras "Powercell":
o Son las más largas (1.22 mm), lo que es excelente para la resistencia del
papel.
o Tienen una alta proporción de finos B (fibrillas) (0.40%) y un índice de
fibrilación relativamente alto (0.50%), lo que indica un buen refinado y
una alta capacidad de unión de fibras.
o Son más finas (0.24 mg/m de coarseness) que la mezcla de referencia, a
pesar de ser más largas. Fibras más largas y finas (alta relación de
esbeltez) son ideales para la resistencia.
o La dificultad para desintegrarse sin tratamiento químico confirma la
presencia de agentes de resistencia en húmedo. Esto es un rasgo de
diseño del producto final (servilleta) y una limitación para el análisis de
la pulpa.
2. Fibras de referencia ("normal mix"):
o Son de longitud intermedia (1.03 mm).
o Son las más anchas y las que tienen el mayor coarseness (25.55 µm y
0.27 mg/m). Esto podría indicar un mayor contenido de fibra de madera
dura o pulpa sin refinar.
o Presentan los valores más bajos de finos B y fibrilación, lo que sugiere
una menor capacidad de unión y, por lo tanto, una menor resistencia
potencial en comparación con la "powercell".
3. Fibras de "converting rolls":
o Son las más cortas (0.67 mm) y las más finas (0.14 mg/m).
o Tienen una cantidad extremadamente alta de finos A (21.0%), lo que
confirma que son principalmente fragmentos de fibras cortadas durante
el proceso de "converting".
o Aunque tienen un índice de fibrilación alto (0.60%), esto probablemente
se debe a la degradación de las fibras por el corte y no a un refinado
óptimo.
En resumen: El informe revela que la pulpa "Powercell" tiene una morfología superior
(fibras más largas, mayor fibrilación) que contribuye a mejorar las propiedades del
papel. La presencia de agentes de resistencia en húmedo complica el análisis de
laboratorio, pero es un factor clave en el rendimiento del producto final. El análisis
también demuestra que las fibras del "converting" son una fracción degradada y
fragmentada, mientras que las de referencia se sitúan en un punto intermedio en
cuanto a su morfología.