Умножение массива VBA, поэлементно без зацикливания - PullRequest
3 голосов
/ 10 марта 2012

Привет всем: Следующая проблема liitle:

Option Base 1
Sub Test()
Dim aa() As Integer
Dim bb() As Integer
ReDim aa(3)
ReDim bb(3)
For j = 1 To 3
    aa(j) = j * 2
    bb(j) = j * 3
Next j
End Sub

Теперь единственное, что я хочу сделать, - это умножить два одномерных массива по элементам без циклов, а затем выгрузить этот новый массив24,54) в диапазоне.Я уверен, что это должно быть легко возможно.Решение, которое я вижу, состоит в том, чтобы создать диагональную матрицу (массив) и затем использовать mmult, но я уверен, что это выполнимо очень простым способом.Спасибо за помощь.

Ответы [ 3 ]

4 голосов
/ 10 марта 2012

Нет способа сделать умножение на каждый элемент в массиве без цикла. В некоторых языках есть методы, которые, кажется, делают именно это, но внутри они зацикливаются.

Как вы упомянули в ваших комментариях, у вас есть 2 варианта:

  • Перебрать диапазон и выполнить умножение
  • Сбросить диапазон в массив, выполнить умножение, затем сбросить обратно в диапазон

Все зависит от ваших данных, но почти всегда вы обнаружите, что выгрузка диапазона в массив вариантов, выполнение вашей работы и выгрузка обратно будут намного быстрее, чем циклически проходить через диапазон ячеек. Заметьте, то, как вы сбросите его обратно в диапазон, также повлияет на скорость.

4 голосов
/ 17 апреля 2013

Можно умножить диапазоны без явного зацикливания, например try:

sub try()
  [c1:c3].value = [a1:a3 * b1:b3]
end sub

Та же логика, что и в: = sumproduct (a1: A3-b1: b3; a1: A3-b1: b3)

0 голосов
/ 10 марта 2012

Я не совсем уверен, что это возможно на любом языке (за исключением некоторых функциональных языков). Возможно, если бы вы сказали нам, почему вы хотели сделать это, мы могли бы помочь вам больше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...