VBA中如何对toArray输出的每个元素实现5行间隔偏移放置
问题根因
代码运行不符合预期的核心原因有两点:
- 每次循环都将ArrayList存储的全部历史条目整体写入J列,而非仅写入当前新生成的单个条目
- 写入J列时使用的
Resize(S02_List.Count, 1)会自动扩展写入区域大小为当前列表总长度,导致每次写入都会覆盖后续多行,重复输出之前的所有内容
修正代码
可以直接使用调整后的代码,逻辑简洁,不会出现重复写入问题:
Set S02_List = CreateObject("System.Collections.ArrayList") Dim i As Integer ' 循环生成所有节点条目 For i = 1 To rndNodeAmount_S02 S02_List.Add "Sector02_Node0" & i Next i With Worksheets(17) ' H列连续输出所有条目(保留原有连续写入效果) .Range("H4").Resize(S02_List.Count, 1).Value = _ WorksheetFunction.Transpose(S02_List.toArray) ' J列按间隔逐行写入单个条目 For i = 0 To S02_List.Count - 1 ' 从J4开始,每写完一个条目向下偏移5行放置下一个 .Range("J4").Offset(i * 5, 0).Value = S02_List(i) Next i End With
偏移量调整说明:如果需要两个条目之间留出5个完整空白行(例如第一个在J4,第二个在J10,中间J5-J9共5行空白),只需要把J列写入的偏移计算
i * 5修改为i * 6即可。
可选优化
如果节点生成量很大(超过1000个),可以先构建和目标区域大小一致、带空行间隔的数组,一次性写入J列,能大幅提升运行速度,避免逐单元格写入的性能损耗。
内容的提问来源于stack exchange,提问作者phoenix
相关产品推荐
相关产品推荐

