我在汇总VBA中数组的特定条目时遇到问题。我举一个例子说明我的矩阵是什么样的(让我们称之为矩阵“startMatrix”)
Date ticker value
2005.01 200 1000
2005.01 300 2222
2005.01 400 2000
2005.02 200 1100
2005.02 300 3000
2005.02 400 5555
在VBA中,矩阵的读入方式如下:
startMatrix(1,1) = 2005.01
startMatrix(1,2) = 200
startMatrix(1,3) = 1000
startMatrix(2,1) = 2005.01
startMatrix(2,2) = 300
....
startMatrix(6,3) = 5555
因此,如果股票代码为200或300,我想总结每个日期的值并保存这个新数组(让我们称之为finalMatrix)。 finalMatrix应该是这样的:
Date Value
2005.01 3222
2005.02 4100
finalMatrix最终应该在VBA中看起来像这样:
finalMatrix(1,1) = 2005.01
finalMatrix(1,2) = 3222
finalMatrix(2,1) = 2005.01
finalMatrix(2,2) = 4100
我不习惯这些操作,所以我真的非常感谢你的帮助。 提前谢谢你,祝你有个愉快的一天 埃利奥
答案 0 :(得分:2)
最好使用字典而不是数组作为输出。
启用Microsoft Scripting Runtime参考
使用字典时,您可以输入日期作为键。然后,您可以评估startMatrix
数组的每次迭代,该日期是否已作为键存在。如果没有,则创建一个新密钥并添加该值。如果它确实存在,则获取分配给键的值,并从数组中添加其他值。
Option Explicit
Public Sub sum_values()
Dim wb As Workbook, ws As Worksheet
Dim dict As Scripting.Dictionary
Dim startMatrix() As Variant
Dim i As Long
Set wb = ThisWorkbook
Set ws = wb.Sheets(1)
startMatrix = ws.Range("A2:C7")
Set dict = New Scripting.Dictionary
For i = LBound(startMatrix, 1) To UBound(startMatrix, 1)
If Not dict.Exists(startMatrix(i, 1)) Then
dict(startMatrix(i, 1)) = startMatrix(i, 3)
Else
dict(startMatrix(i, 1)) = dict(startMatrix(i, 1)) + startMatrix(i, 3)
End If
Next i
End Sub
像上面这样的东西对你有用。 Here是字典的阅读材料。
你甚至可以排除If
语句,只需在For...Next
语句中包含这一行:
dict(startMatrix(i, 1)) = dict(startMatrix(i, 1)) + startMatrix(i, 3)