arrays - VBA锯齿状数组重复
问题描述
我是使用 VBA 编码的新手,也是一般的初学者程序员。我有以下简单的表格(数据每天都在输入,所以它会改变):
物品 # | 描述 | 日期 | 地点 | 盘子 | 加载 | 类型 | 速度 | 成本 |
---|---|---|---|---|---|---|---|---|
0001 | DES1 | 21 年 1 月 30 日 | 地点 | ABC123 | 5 | 一 | 类型 1 | 100 |
0002 | DES2 | 21 年 1 月 30 日 | 办公室 | ACB465 | 4 | 一 | 类型 1 | 100 |
0003 | DES3 | 21 年 1 月 30 日 | 办公室 | ABC789 | 3 | 一 | 类型 1 | 100 |
0004 | DES4 | 21 年 1 月 30 日 | 地点 | ABS741 | 5 | 一 | 类型 1 | 100 |
0005 | DES4 | 21 年 1 月 31 日 | 办公室 | ABC852 | 2 | 一 | 类型 1 | 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
我认为我在完成第三部分(摘要)时不会遇到太多麻烦,但是如果您知道如何做,请随时分享您将如何处理它。我主要需要第二部分的帮助。如果需要,我将非常乐意编辑并提供更多信息。提前致谢。
解决方案
这是使用字典的一种方法。
dim dict, rw as range, locn, k, msg, theDate
set dict= createobject("scripting.dictionary")
theDate = Worksheets("Daily Tracking").Range("B2").Value
'adjust table range as required
for each rw in worksheets("Disposal Fees").range("F6:K100").rows
if rw.cells(3).Value = theDate Then 'date match?
locn = rw.cells(4).Value 'read location
dict(locn) = dict(locn) + rw.cells(6).Value 'add load to sum
end if
next rw
'loop over the dictionary keys and build the output
for each k in dict
msg = msg & IIf(len(msg) > 0, ", ", "") & dict(k) & " " & k
next k
debug.print msg
推荐阅读
- javascript - 调用自身的异步函数
- windows - 两个 Windows 设备之间的 webRTCConnection 失败
- coq - Coq:如何在不搞乱归纳假设的情况下正确记住依赖值?
- css - 如何让产品图片在手机版中显示?
- c++ - 我真的很想知道我在这个程序中哪里做错了。一切都在运行 readAll 函数,我在其中执行访问冲突
- ruby - Ruby:将相同的参数传递给继承类中的多个方法时
- node.js - Next JS + 自定义节点 Lambda
- javascript - 从脚本标签中获取json格式的数据
- java - 应用程序启动方法中的异常 java.lang.reflect.InvocationTargetException 场景构建器
- python - 如何在 Python Dedupe 库中实现自定义比较器?