编辑:通过打印数组,我的意思是将数组放在工作表中的一个范围内:)
我在带有 VBA 的 excel 表格上使用以下代码。这将行与匹配的销售代表结合起来。下面是源表。这被加载到一个数组中。
运行下面的代码后,行被合并,我将合并的行清空。我的挑战是打印某些列并且只打印非空行。为了做到这一点,我试图遍历数组并创建另一个只有非空行的数组。
Sub mergeCategoryValues2()
Dim arr2 As Variant
Dim rowcount As Long
Dim i As Variant
Dim colcount As Long
arr2 = ActiveSheet.ListObjects("APPLE").Range
rowcount = UBound(arr2, 1)
colcount = UBound(arr2, 2)
For i = rowcount To 2 Step -1
If arr2(i, 3) = arr2(i - 1, 3) Then
arr2(i - 1, 6) = arr2(i - 1, 6) + arr2(i, 6)
For k = 1 To colcount
arr2(i, k) = Null 'this loop is probably not required i can probably just use the first column
Next k
End If
Next i
End Sub
最终,我只想打印非空行和列 3、2 和 6。我认为最好的方法是创建一个非空行的数组最佳答案
为结果创建一个与数据数组具有相同行数的数组。向下扫描数据行,并在 C 列中的每次值更改时为结果数组增加一个行计数器。使用调整大小转储结果的使用部分。
更新 - 包括标题
Sub mergeCategoryValues2()
Dim arr2 As Variant, arOut As Variant
Dim rowcount As Long, colcount As Long
Dim i As Long, k As Long, v
arr2 = ActiveSheet.ListObjects("APPLE").Range
rowcount = UBound(arr2, 1)
colcount = UBound(arr2, 2)
ReDim arOut(1 To rowcount, 1 To 3)
For i = 1 To rowcount
If arr2(i, 3) = v Then
arOut(k, 3) = arOut(k, 3) + arr2(i, 6)
Else
k = k + 1
v = arr2(i, 3) ' compare with following rows
arOut(k, 1) = arr2(i, 2)
arOut(k, 2) = arr2(i, 3)
arOut(k, 3) = arr2(i, 6)
End If
Next i
Sheet2.Range("A1").Resize(k, 3).Value2 = arOut
MsgBox "OK"
End Sub
关于excel - 您可以从 VBA 中的数组创建数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70190109/