【发布时间】:2021-05-04 15:41:51
【问题描述】:
我是使用 VBA 编码的新手,并且是一般的初学者程序员。我有以下简单的表格(数据每天都在不断输入,所以它会发生变化):
| Item # | Description | Date | Location | Plate | Load | Type | Rate | Cost |
|---|---|---|---|---|---|---|---|---|
| 0001 | des1 | 30/1/21 | Site | ABC123 | 5 | One | typ1 | 100 |
| 0002 | des2 | 30/1/21 | Office | ACB465 | 4 | One | typ1 | 100 |
| 0003 | des3 | 30/1/21 | Office | ABC789 | 3 | One | typ1 | 100 |
| 0004 | des4 | 30/1/21 | Site | ABS741 | 5 | One | typ1 | 100 |
| 0005 | des4 | 31/1/21 | Office | ABC852 | 2 | One | typ1 | 100 |
我想先按特定日期过滤此数据,然后删除位置中的重复数据,同时为所述重复数据添加加载。
例如,如果我想过滤 30/1/21。最终结果如下:
| Location | Load |
|---|---|
| Site | 10 |
| Office | 7 |
然后我想把它放在一个摘要单元格中,如下所示:
| Summary |
|---|
| 10 Site, 7 Office |
我能够将原始表格过滤成锯齿状数组。代码是:
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
我认为完成第三部分(摘要)不会有太多麻烦,但如果您知道如何做,请随时分享您将如何处理它。我主要需要第二部分的帮助。如果需要,我将非常乐意编辑并提供更多信息。提前致谢。
【问题讨论】:
-
您需要第二张表,还是只需要最后的摘要?
-
我需要得到最后的总结。也许有比我做的更好的方法来解决它,但我不确定。
标签: arrays excel vba duplicates jagged-arrays