繁体   English   中英

填充2维VBA阵列Excel

[英]Populating 2 Dimension VBA Array Excel

在此处输入图片说明

我一直停留在创建和填充一个数组上,该数组将上一行显示的每个lineitem存放区按描述标题下列出的Acct进行分类。 下图中有7列。(7列)

该电子表格每天进行更新,并且在excel电子表格中最多可以包含50,000行,因此“ For Next”循环并不是真正理想的选择,因为按Acct Number填充数组后,下一步是按“今天的日期”。

我通过debug.print在即时窗口中得到结果,但每个Acct Number的位数未正确累加。 我正在寻求帮助,以了解是否有人对我没有到这里的内容有任何特定的想法。

Option Explicit
Option Compare Text
Option Base 1

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

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

我通过修补找到了答案。 Array(i,2)其中2代表Range的第二列,这是我想要的。 感谢任何考虑答案的人。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM