如何使用数组将VBA多段Range定义及复制粘贴代码简化为精简写法
VBA代码精简实现方案(数组版)
无需逐列定义范围变量、无需调用剪切板复制粘贴,通过列映射数组+值直接传递实现需求,代码如下:
' 以下代码需放在原有 Worksheet 的 With 代码块中,且需保证 LastRow 变量已提前正确赋值 Dim srcCols, tgtCols, i As Long, tmpArr As Variant ' 按顺序定义源列、目标列映射,后续修改列规则仅需调整此处数组 srcCols = Array("K", "D", "W", "X", "Z", "AT") tgtCols = Array("A", "B", "C", "D", "E", "F") For i = LBound(srcCols) To UBound(srcCols) ' 读取单列源数据到数组,范围为源列第2行到最后一行 tmpArr = .Range(srcCols(i) & "2:" & srcCols(i) & LastRow).Value ' 数组值直接写入目标列,范围为目标列第3行到最后一行 .Range(tgtCols(i) & "3:" & tgtCols(i) & LastRow).Value = tmpArr Next i
方案优势
- 代码精简:删除了所有重复的范围定义、复制粘贴语句,总代码量不足原代码的1/3
- 执行高效:全程通过内存数组传递值,不调用系统剪切板,数据量越大效率优势越显著
- 易维护:列映射规则统一存放在数组中,后续调整列对应关系无需修改逻辑代码
注意事项
如果你的源数据和目标数据的行偏移规则有调整,仅需要修改对应Range的行号参数即可。
内容的提问来源于stack exchange,提问作者Oliver Theseira
相关产品推荐
相关产品推荐

