You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA如何高效实现连续列到目标表非连续列的复制粘贴?

VBA 多列非连续粘贴高效实现方案

核心思路

通过数组定义源列和目标列的映射关系,用循环替代重复代码,同时支持直接赋值(无剪贴板,性能最优)和带格式复制两种场景。

实现代码

场景1:仅需复制数值(性能最优)

无需调用剪贴板,运行速度是传统复制粘贴的3~10倍,适合数据量较大的场景:

Sub Transfer()
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim nr_rows As Long, i As Long
    ' 配置项:按源列顺序填写目标表Basics对应的列标,用英文逗号分隔
    Const TARGET_COL_LIST As String = "E,F,H,J,K,M,O,P,R,S,T,V,X,Y,Z"
    Dim arrTargetCols As Variant
    
    Set wsSource = ThisWorkbook.Worksheets("1")
    Set wsTarget = ThisWorkbook.Worksheets("Basics")
    arrTargetCols = Split(TARGET_COL_LIST, ",")
    
    With wsSource
        nr_rows = .Range("A2").End(xlDown).Row
        ' 循环处理15列数据
        For i = 0 To 14
            wsTarget.Range(arrTargetCols(i) & "10").Resize(nr_rows - 1, 1).Value = _
                .Range(.Cells(2, i + 1), .Cells(nr_rows, i + 1)).Value
        Next i
    End With
End Sub

场景2:需要保留格式/公式

如果需要保留原单元格的格式、公式、数据验证等属性,使用带复制粘贴的循环版本:

Sub TransferWithFormat()
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim nr_rows As Long, i As Long
    ' 配置项:按源列顺序填写目标表Basics对应的列标,用英文逗号分隔
    Const TARGET_COL_LIST As String = "E,F,H,J,K,M,O,P,R,S,T,V,X,Y,Z"
    Dim arrTargetCols As Variant
    
    Set wsSource = ThisWorkbook.Worksheets("1")
    Set wsTarget = ThisWorkbook.Worksheets("Basics")
    arrTargetCols = Split(TARGET_COL_LIST, ",")
    
    With wsSource
        nr_rows = .Range("A2").End(xlDown).Row
        ' 循环处理15列数据
        For i = 0 To 14
            .Range(.Cells(2, i + 1), .Cells(nr_rows, i + 1)).Copy _
                Destination:=wsTarget.Range(arrTargetCols(i) & "10")
        Next i
    End With
End Sub

使用说明

修改代码中TARGET_COL_LIST常量的内容,按照源表中15个相邻列的顺序,依次填写目标表Basics中对应的列标即可,无需调整其他逻辑。

内容的提问来源于stack exchange,提问作者Sven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:45:07