Escribí una macro para un compañero de trabajo que recientemente copio los datos de una hoja de cálculo de Excel en una matriz 2D de aproximadamente 75000x58 de tamaño, luego recorro cada fila y extrae los datos relevantes.
La macro funciona bien en mi computadora con Windows y se completa en menos de 2 segundos.
La macro también funciona en la Mac de mis compañeros de trabajo, pero lleva mucho más tiempo; entre 2000 y 4000 segundos.
Probé la macro en otras computadoras con Windows con especificaciones inferiores a las de ella y la macro se completa en unos segundos.
¿Hay alguna razón por la que Mac tarda 1000 veces más?
Aquí está la parte principal de la Macro, mechArray y ActivityArray son solo matrices pequeñas: con 4 y 10 elementos cada una, outArray mide alrededor de 120x10x2.
'Transfer Data
For i = 1 To UBound(inArray)
If inArray(i, 1) >= d1 And inArray(i, 1) <= d2 _
And UCase(inArray(i, 17)) = site Then
x = DateDiff("d", d1, inArray(i, 1)) + 1
y = isIn(mechArray, inArray(i, 48))
z = isIn(activityArray, inArray(i, 49))
If y > -1 And z > -1 Then
outArray(x, z, 1) = outArray(x, z, 1) + inArray(i, 5)
outArray(x, z, 2) = outArray(x, z, 2) & inArray(i, 8) & "|"
End If
End If
Next i
Erase inArray
Y esta es la función 'isIn',
Function isIn(arr As Variant, val As Variant) As Single
Dim i
For i = LBound(arr) To UBound(arr)
If arr(i) = val Then
isIn = i
Exit Function
End If
Next i
isIn = -1
End Function