Escrevi uma macro para um colega de trabalho recentemente que copia os dados de uma planilha do Excel em uma matriz 2D de tamanho aproximado de 75.000 x 58, depois percorre cada linha e extrai dados relevantes.
A macro funciona bem no meu computador Windows e é concluída em menos de 2 segundos.
A macro também funciona no Mac dos meus colegas de trabalho, mas demora muito mais; entre 2.000 a 4.000 segundos.
Eu tentei a macro em outros computadores Windows com especificações inferiores às dela e a macro é concluída em alguns segundos.
Existe uma razão pela qual o Mac demora 1000 vezes mais?
Aqui está a parte principal da Macro, mechArray e ActivityArray são apenas pequenos arrays - com 4 e 10 elementos cada, outArray tem cerca 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
E esta é a função '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