Arrays 填充二维VBA数组Excel

Arrays 填充二维VBA数组Excel,arrays,vba,excel,for-loop,multidimensional-array,Arrays,Vba,Excel,For Loop,Multidimensional Array,我一直在创建和填充一个数组,该数组将上述行中的每个行项目存款提取出来,并根据描述标题下列出的帐户对每个存款进行分类。下面描述了7列。(7列) 电子表格每天都会更新,excel电子表格中最多可以有50000行,因此“For Next”循环并不是真正的最佳循环,因为在按账号填充数组后,下一步是根据“今天的日期”按日期对存款进行账龄分析 我通过debug.print在即时窗口中得到一个结果,但每个帐号的AMT相加不正确。我正在寻求帮助,看看是否有人对我没有得到的东西有任何具体想法 Option Exp

我一直在创建和填充一个数组,该数组将上述行中的每个行项目存款提取出来,并根据描述标题下列出的帐户对每个存款进行分类。下面描述了7列。(7列)

电子表格每天都会更新,excel电子表格中最多可以有50000行,因此“For Next”循环并不是真正的最佳循环,因为在按账号填充数组后,下一步是根据“今天的日期”按日期对存款进行账龄分析

我通过debug.print在即时窗口中得到一个结果,但每个帐号的AMT相加不正确。我正在寻求帮助,看看是否有人对我没有得到的东西有任何具体想法

Option Explicit
Option Compare Text
Option Base 1

Const MFGWholesale = 1628258400
Const DealerDirect= 8900504722
Const Retail = 8901054887

子累加和()
变暗目的地范围
尺寸i为整数,j为整数
Dim ArrayMFG()作为变量,ArrayDD()作为变量,ArrayRetail()作为变量
作为整数的Dim rcnt
将ws设置为工作表
设置ws=工作表(“试用版”)
'关闭屏幕更新和自动计算以减少处理时间
应用
.ScreenUpdate=False
.Calculation=xlCalculationManual
以
'如果在运行阵列进程之前处于活动状态,则取消筛选
如果是ws.FilterMode,那么
ws.ShowAllData
如果结束
rcnt=ws.Range(“ColSeven”).Rows.Count'
我通过修修补补找到了答案。数组(i,2),其中2表示我想要的范围内的第二列。对任何考虑答案的人都是如此


为什么不使用数据透视表?是的,我们可以在新的电子表格中使用处理器数据透视表50000行项目记录,但此表中的数据位于工作簿中,我必须能够从处理器的文件中提取出来,并放置在完全独立的账龄工作表中,以便向公司董事报告。在按列出的账号将存款汇总为3类后,我必须根据当前日期将汇总的存款分为会计桶。因此,第1行项目17648.69美元将是MFGWholesale猫,0~3天桶。我们最好通过VBASort在日期使用使用使用递归性的快速排序UDF对数组进行排序。
Sub AccumulativeSum()
Dim Dest As Range
Dim i As Integer, j As Integer
Dim ArrayMFG() As Variant, ArrayDD() As Variant, ArrayRetail() As Variant

Dim rcnt As Integer
Dim ws As Worksheet
Set ws = Worksheets("Trial")

'Turns off screen updating and auto calc to reduce process time
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With

'unfilters if it's active BEFORE running the Array Process
If ws.FilterMode Then
    ws.ShowAllData
End If

rcnt = ws.Range("ColSeven").Rows.Count '<-- Initial Row Count of ColSeven Range
rCol = ws.Range("ColSeven").Value2 '< -- Value2 has it's advantages for arrays

'Resizing the Arrays
ReDim ArrayMFG(1 To rcnt, 1 To 7)
ReDim ArrayDD(1 To rcnt, 1 To 7)
ReDim ArrayRetail(1 To rcnt, 1 To 7)

'Group by Respective Bank Accts
For i = LBound(rCol, 1) To UBound(rCol, 1)

    If Len(rCol(i, 2)) <> 10 Then
        MsgBox "The Description for Cell: B" & i + 3 & " [Column B Row " & i + 3 & "] must include a 10 digit Acct Number"
        Exit Sub
    Else
    End If

    For j = LBound(rCol, 2) To UBound(rCol, 2)
        Select Case rCol(i, 2)
            Case MFGWholesale
                ArrayMFG(i, j) = rCol(i, 7) + ArrayMFG(i, 7)
            Case DealerDirect
                ArrayDD(i, j) = rCol(i, 7) + ArrayDD(i, 7)
            Case Retail
                ArrayRetail(i, j) = rCol(i, 7) + ArrayRetail(i, 7)
        End Select
    Next j
Next i

Dest.Value = Application.WorksheetFunction.Sum(ArrayMFG) 
Debug.Print Dest.Value
Dest.Value = Application.WorksheetFunction.Sum(ArrayDD)
Debug.Print Dest.Value
Dest.Value = Application.WorksheetFunction.Sum(ArrayRetail)
Debug.Print Dest.Value

With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With

End Sub
For j = LBound(rCol, 2) To UBound(rCol, 2)
    Select Case rCol(i, 2)
        Case MFGWholesale
            ArrayMFG(i, 2) = rCol(i, 7) + ArrayMFG(i, 7)
        Case DealerDirect
            ArrayDD(i, 2) = rCol(i, 7) + ArrayDD(i, 7)
        Case Retail
            ArrayRetail(i, 2) = rCol(i, 7) + ArrayRetail(i, 7)
    End Select
Next j