【问题标题】:Populating 2 Dimension VBA Array Excel填充二维 VBA 数组 Excel
【发布时间】:2018-07-25 14:06:15
【问题描述】:

我一直在创建和填充一个数组,该数组在上面显示的一行中获取每个 lineitem 存款,并按描述标题下列出的 Acct 对每个存款进行分类。下面描述了 7 列。(7 Col)

电子表格每天更新,Excel 电子表格中最多可以有 50,000 行,因此“For Next”循环并不是最佳选择,因为在按帐户编号填充数组后,下一步是按日期对存款进行老化反对“今天的日期”。

我通过 debug.print 在即时窗口中得到结果,但每个帐户编号的 amts 没有正确加起来。我正在寻求帮助,看看是否有人对我在这里没有得到什么有任何具体的想法。

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

【问题讨论】:

  • 为什么不使用数据透视表?
  • 是的,我们可以在一个新的电子表格中让处理器数据透视表 50,000 行项目记录,但是这张表上的数据在一个工作簿中,我必须能够从处理器的文件中提取它并且放置在一个完全独立的账龄工作表中,以便向公司董事报告。在通过列出的帐户编号将存款汇总为 3 类之后,我必须根据当前日期将汇总的 Deps 老化到会计桶中。因此,17,648.69 美元的第一行项目将是 MFGWholesale Cat,0~3 天桶。最好我们通过 VBA 来实现
  • 使用使用递归的快速排序 UDF 按日期对数组进行排序。

标签: arrays vba excel for-loop multidimensional-array


【解决方案1】:

我通过修补找到了答案。 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2018-02-15
    相关资源
    最近更新 更多