VBA中如何对一维/二维数组(矩阵)逐元素求和?
VBA数组逐元素求和解决方案
嘿,这个问题我太熟悉了!先给你提个关键细节:从Excel单元格区域通过.Value获取的数组,哪怕是单列/单行,本质都是二维数组——比如你说的7行1列,实际是(1 To 7, 1 To 1)的二维结构,不是一维数组哦。这点得留意,不然写循环的时候容易踩坑。
下面分两种场景给你写具体实现:
场景1:7行1列的数组逐元素求和
先声明一个和原数组维度一致的结果数组,然后通过循环遍历每一行,把两个数组对应位置的元素相加:
Sub SumSingleColumnArrays() Dim Per_Mnd As Variant, Per_Mnd2 As Variant, SumArr As Variant Dim i As Integer ' 读取两个区域的数组(都是7行1列的二维数组) Per_Mnd = Worksheets("Sheet1").Range("G2:G8").Value Per_Mnd2 = Worksheets("Sheet2").Range("G2:G8").Value ' 初始化结果数组,维度和原数组一致 ReDim SumArr(LBound(Per_Mnd, 1) To UBound(Per_Mnd, 1), _ LBound(Per_Mnd, 2) To UBound(Per_Mnd, 2)) ' 逐行求和 For i = LBound(Per_Mnd, 1) To UBound(Per_Mnd, 1) SumArr(i, 1) = Per_Mnd(i, 1) + Per_Mnd2(i, 1) Next i ' 可选:把结果写回工作表,比如Sheet3的G2:G8 Worksheets("Sheet3").Range("G2:G8").Value = SumArr End Sub
场景2:7行2列的矩阵逐元素求和
这种情况只需要在循环里多嵌套一层列的遍历,同时处理行和列的对应元素:
Sub SumTwoColumnArrays() Dim Per_Mnd As Variant, Per_Mnd2 As Variant, SumArr As Variant Dim i As Integer, j As Integer ' 读取两个7行2列的二维数组 Per_Mnd = Worksheets("Sheet1").Range("G2:H8").Value Per_Mnd2 = Worksheets("Sheet2").Range("G2:H8").Value ' 初始化结果数组 ReDim SumArr(LBound(Per_Mnd, 1) To UBound(Per_Mnd, 1), _ LBound(Per_Mnd, 2) To UBound(Per_Mnd, 2)) ' 双重循环:逐行逐列求和 For i = LBound(Per_Mnd, 1) To UBound(Per_Mnd, 1) For j = LBound(Per_Mnd, 2) To UBound(Per_Mnd, 2) SumArr(i, j) = Per_Mnd(i, j) + Per_Mnd2(i, j) Next j Next i ' 可选:把结果写回工作表,比如Sheet3的G2:H8 Worksheets("Sheet3").Range("G2:H8").Value = SumArr End Sub
小提示
- 用
LBound和UBound代替硬编码的数字(比如7、2),能让代码更灵活——哪怕后续区域大小变了,代码也不用改。 - 如果你的数组确实是手动声明的一维数组(比如
Dim arr(1 To 7)),那循环只需要遍历一维的索引就行,逻辑是完全相通的。
内容的提问来源于stack exchange,提问作者user8330379
相关产品推荐
相关产品推荐

