Я написал макрос для напарника, который недавно скопировал данные из электронной таблицы Excel в двумерный массив размером примерно 75000x58, затем перебирает каждую строку и извлекает соответствующие данные.

Макрос хорошо работает на моем компьютере с Windows и завершается менее чем за 2 секунды.

Макрос также работает на моих коллегах по Mac, но занимает гораздо больше времени; от 2000 до 4000 секунд.

Я пробовал макрос на других компьютерах Windows с более низкими характеристиками, чем у нее, и макрос завершается через несколько секунд.

Есть ли причина, по которой Mac занимает больше 1000 раз?

Вот основная часть Macro, mechArray и ActivityArray - это только небольшие массивы - с 4 и 10 элементами каждый, outArray составляет около 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

И это функция '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

0