请求调整VBA列操作代码:按指定列映射重构数组逻辑
修改后的VBA代码(适配列映射需求)
没问题,我帮你把代码调整好了,完全符合你说的列映射规则,同时保留了原代码高效处理大数据集的优势。下面是修改后的完整代码:
Dim Ary As Variant, Nary As Variant Dim r As Long, Rw As Long With Sheets("Sheet1") ' 原A列→D列(第4列),原B列→N列(第14列),读取对应范围的数据到数组 Ary = .Range("D2:N" & .Range("D" & Rows.Count).End(xlUp).Row).Value2 End With ' 结果数组保持行数和原数组一致,仅1列用于存储汇总结果 ReDim Nary(1 To UBound(Ary), 1 To 1) With CreateObject("scripting.dictionary") For r = 1 To UBound(Ary) ' 用D列(数组第1列,因为Ary从D开始取,所以Ary(r,1)对应原D列)作为字典键 If Not .Exists(Ary(r, 1)) Then .Add Ary(r, 1), r ' 原B列→N列,对应数组第11列(D到N共11列:14-4+1=11) Nary(r, 1) = Ary(r, 11) Else Rw = .Item(Ary(r, 1)) ' 汇总N列的数据到对应行的结果数组中 Nary(Rw, 1) = Nary(Rw, 1) + Ary(r, 11) End If Next r End With With Sheets("Sheet1") ' 将结果输出到O列(第15列),从O2开始 .Range("O2").Resize(UBound(Nary)).Value = Nary End With
关键修改点说明:
- 数据源范围调整:原代码读取
A2:B范围,现在改为读取D2:N范围,确保包含需要的D列(键列)和N列(数值列)。 - 数组列索引对应:
- 原A列对应现在的D列,在数组
Ary中是第1列(因为数组从D列开始读取,所以Ary(r,1)就是D列的值) - 原B列对应现在的N列,在数组
Ary中是第11列(计算方式:14-4+1=11,即从D到N的列数)
- 原A列对应现在的D列,在数组
- 输出目标调整:原代码输出到C列,现在改为输出到O列,从
O2开始写入结果数组。 - 移除重复输出语句:原代码最后重复写了一次输出语句,我已经删掉了冗余的那行。
内容的提问来源于stack exchange,提问作者Aziz Shaikh
相关产品推荐
相关产品推荐

