Ich habe ein Makro für einen Arbeitskollegen geschrieben, der kürzlich die Daten aus einer Excel-Tabelle in ein 2D-Array mit einer Größe von ca. 75000 x 58 kopiert, dann jede Zeile durchläuft und relevante Daten extrahiert.
Das Makro funktioniert gut auf meinem Windows-Computer und ist in weniger als 2 Sekunden abgeschlossen.
Das Makro funktioniert auch auf dem Mac meiner Arbeitskollegen, dauert aber viel länger. zwischen 2000 und 4000 Sekunden.
Ich habe das Makro auf anderen Windows-Computern mit niedrigeren Spezifikationen als ihren ausprobiert und das Makro ist in wenigen Sekunden fertig.
Gibt es einen Grund, warum der Mac 1000x länger braucht?
Hier ist der Hauptteil des Makros, mechArray und activityArray sind nur kleine Arrays - mit jeweils 4 und 10 Elementen ist outArray etwa 120 x 10 x 2 groß.
'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
Und das ist die Funktion '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