Как сделать сумму значений в двух массивах в VBA

Я пытаюсь сделать сумму двух массивов в VBA, поскольку я пытаюсь избежать ссылки на рабочий лист до времени записи из-за его размера и сложности.

Я знаю, что могу использовать функцию приложения для запуска sumproduct с определением двух диапазонов, но это все еще ссылается на рабочий лист, можно ли это сделать, просто используя массивы исключительно в коде?


person Marc L    schedule 17.12.2012    source источник
comment
А, спасибо, интересно, как вы это сделали. Я попытался использовать ошибку up, но она сказала, что у меня слишком низкая репутация, чтобы сделать это.   -  person Marc L    schedule 17.12.2012


Ответы (1)


Конечно, вы просто вызываете СУММПРОИЗВ и передаете ему массивы: (но обратите внимание, что это немного неэффективно)

Sub testing2()
Dim varr1(1 To 10)
Dim varr2(1 To 10)
Dim vres As Variant
Dim j As Long
For j = 1 To 10
varr1(j) = j
varr2(j) = j * 10
Next j
vres = Application.WorksheetFunction.SumProduct(varr1, varr2)
End Sub
person Charles Williams    schedule 17.12.2012
comment
Это менее эффективно, чем запись в файл? Моя проблема состоит в том, чтобы попытаться найти наилучшее возможное решение для сокращения скорости выполнения. - person Marc L; 17.12.2012
comment
Кроме того, возможно ли сделать это с подмножеством существующего массива или только с полным массивом, поэтому в вашем примере здесь используется elemenst 5-10 из varr1, а затем массив2 будет определен всего с 5 элементами, или вам придется загрузить подмножество в новый массив? - person Marc L; 17.12.2012
comment
Вероятно, это быстрее, чем писать на лист и выполнять СУММПРОИЗВ на листе. Но он работает путем преобразования массивов вариантов в формат, понятный СУММПРОИЗВ, а преобразование требует времени. Для подмножества, вероятно, быстрее всего загрузить закат в новый массив. Но реальный вопрос, вероятно, заключается в том, почему вы используете СУММПРОДУКТ? - person Charles Williams; 17.12.2012
comment
По сути, у меня есть список инвестиций и ожидаемая доходность в зависимости от типа — каждая из них должна быть умножена на соответствующую доходность. Поскольку в каждом по двадцать, я подумал, что быстрее сделать это с помощью суммы произведений. Будет ли это быстрее, если просто умножить каждый результат? - person Marc L; 17.12.2012
comment
Зависит от того, как организованы данные — я предлагаю вам начать синхронизировать различные подходы, чтобы увидеть, какой из них лучше всего подходит для вас. - person Charles Williams; 17.12.2012
comment
Спасибо, думаю, нужно поэкспериментировать - person Marc L; 17.12.2012