Arrays VBA数组乘法,元素级,无循环

Arrays VBA数组乘法,元素级,无循环,arrays,vba,element,multiplication,Arrays,Vba,Element,Multiplication,大家好:下一期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 现在我只想做一件小事,就是不循环地将两个一维数组元素相乘,然后在一个范围内卸载这个新数组(6,24,54)。我相信这是很容易做到的。我将看到的一个解决方案是创

大家好:下一期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

现在我只想做一件小事,就是不循环地将两个一维数组元素相乘,然后在一个范围内卸载这个新数组(6,24,54)。我相信这是很容易做到的。我将看到的一个解决方案是创建一个对角矩阵(数组),然后使用mmult,但我相信这是一种非常简单的方法。感谢您的帮助。

我不完全确定这在任何语言中都是可行的(某些函数式语言可能除外)。如果您告诉我们为什么要这样做,我们可能会帮助您更多?

如果没有循环,就无法对数组中的每个元素进行乘法。有些语言的方法似乎就是这样做的,但在引擎盖下它们是循环的

正如您在评论中提到的,您有两种选择:

  • 循环一个范围并进行乘法运算
  • 将范围转储到数组中,执行乘法,然后再转储回范围

这一切都取决于您的数据,但您几乎总是会发现,将一个区域转储到一个变体数组中,完成您的工作并将其转储回要比在一系列单元格中循环快得多。注意,如何将其转储回某个范围也会影响速度。

可以在不显式循环的情况下倍增范围,例如,尝试:

sub try()
  [c1:c3].value = [a1:a3 * b1:b3]
end sub
与中的逻辑相同:
=sumproduct(a1:A3-b1:b3;a1:A3-b1:b3)

循环是唯一的方法-mmult将在内部循环其矩阵-在您的例程中这样做有什么反对意见?我在一张表中的一行中有两个值,在另一张表的一列中有两个值,使用vba,我想将它们元素相乘,然后在第三张纸中卸载……我习惯了Matlab/R,所以我认为最有效的方法是将值读入数组,然后执行元素相乘……所以在这种情况下,我将执行循环。但是,您知道在类范围上应用乘法更快吗?还是建议先将数据加载到数组中,执行计算,然后将它们推回某个范围?那么,将其推回某个范围的最佳方法是什么?;-)是否还需要循环?可以对数组使用转置工作表方法,一次将其转储回。Application.WorksheetFunction.transpose()