![Работают ли массивы Excel/VBA по-разному на компьютерах Windows и Mac?](https://rvso.com/image/1542498/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%82%20%D0%BB%D0%B8%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B%20Excel%2FVBA%20%D0%BF%D0%BE-%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D0%BC%D1%83%20%D0%BD%D0%B0%20%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0%D1%85%20Windows%20%D0%B8%20Mac%3F.png)
Недавно я написал макрос для коллеги, который копирует данные из таблицы Excel в двумерный массив размером примерно 75000x58, затем проходит по каждой строке и извлекает соответствующие данные.
Макрос отлично работает на моем компьютере с Windows и выполняется менее чем за 2 секунды.
Макрос также работает на Mac моего коллеги, но занимает гораздо больше времени: от 2000 до 4000 секунд.
Я пробовал макрос на других компьютерах Windows с более низкими характеристиками, чем у нее, и макрос завершался за несколько секунд.
Есть ли причина, по которой Mac загружается в 1000 раз дольше?
Вот основная часть макроса, 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