我刚接触VBA编程,也是一个初学者。我有以下简单的表格(因为每天都会输入数据,所以它会发生变化):
项目编号 | 描述 | 日期 | 位置 | 牌照 | 负载 | 类型 | 费率 | 成本 |
---|---|---|---|---|---|---|---|---|
0001 | des1 | 2021-01-30 | 现场 | ABC123 | 5 | 一 | typ1 | 100 |
0002 | des2 | 2021-01-30 | 办公室 | ACB465 | 4 | 一 | typ1 | 100 |
0003 | des3 | 2021-01-30 | 办公室 | ABC789 | 3 | 一 | typ1 | 100 |
0004 | des4 | 2021-01-30 | 现场 | ABS741 | 5 | 一 | typ1 | 100 |
0005 | des4 | 2021-01-31 | 办公室 | ABC852 | 2 | 一 | typ1 | 100 |
首先,我想按照特定日期过滤这些数据,然后在删除位置的重复项时,将这些重复项的负载相加。
例如,如果我想筛选出30/1/21的数据,结果应如下:
位置 | 负载量 |
---|---|
站点 | 10 |
办公室 | 7 |
然后,我希望将其放入一个汇总单元格中,如下所示:
摘要 |
---|
10 站点, 7 办公室 |
我已经能够将原始表格过滤成不规则数组。代码如下:
For j = numberSkipD To numberRowsD
If Worksheets("Disposal Fees").Range("F" & j).Value = Worksheets("Daily Tracking").Range("B2").Value Then
For k = numberDisposalInformationRaw To numberDisposalLocation
ReDim Preserve disposalLocation(numberDisposalLocation)
disposalLocation(numberDisposalLocation) = Worksheets("Disposal Fees").Range("I" & j).Value
Next
numberDisposalLocation = numberDisposalLocation + 1
For k = numberDisposalInformationRaw To numberDisposalLoad
ReDim Preserve disposalLoad(numberDisposalLoad)
disposalLoad(numberDisposalLoad) = Worksheets("Disposal Fees").Range("K" & j).Value
Next
numberDisposalLoad = numberDisposalLoad + 1
End If
Next
我尝试执行上面的第二张表(删除重复项并将这些重复项的值相加),但是出现了错误,不知道如何解决。我知道它们是索引错误,但不知道如何修复它们。(请帮我解决这个问题,以下是代码)
Dim disposalInformationRaw As Variant
Dim disposalInformationCooked As Variant
Dim FoundIndex As Variant, MaxRow As Long, m As Long
ReDim disposalInformationCooked(1 To UBound(disposalInformationRaw, 1), 1 To UBound(disposalInformationRaw, 2))
MaxRow = 0
For m = 1 To UBound(disposalInformationRaw, 1)
FoundIndex = Application.Match(disposalInformationRaw(m, 1), Application.Index(disposalInformationCooked, 0, 1), 0)
If IsError(FoundIndex) Then
MaxRow = MaxRow + 1
FoundIndex = MaxRow
disposalInformationCooked(FoundIndex, 1) = disposalInformationRaw(m, 1)
End If
disposalInformationCooked(FoundIndex, 2) = Val(disposalInformationCooked(FoundIndex, 2)) + Val(disposalInformationRaw(i, 2))
Next m
Range("G1").Resize(MaxRow, UBound(disposalInformationCooked, 2)).Value = disposalInformationCooked
我认为第三部分(总结)不会有太大的困难,但如果您知道如何做,请随意分享您的方法。我主要需要第二部分的帮助。如果需要,我很乐意进行编辑并提供更多信息。提前感谢。