Excel筛选拷贝

Excel中如果要拷贝粘贴筛选选的内容无法直接粘贴,因为粘贴时候不会过滤隐藏列。
此时可通过VB脚本在两个Sheet页中通过关键字匹配自动拷贝;

Sub CopyColumnsBasedOnTargetName()
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim lastRowSource As Long
    Dim lastRowTarget As Long
    Dim i As Long
    Dim j As Long
    Dim keyCol As Variant
    Dim sourceColumn As Variant
    Dim targetColumns As Variant
    Dim targetRow As Long
    Dim foundCell As Range
    Dim targetName As String
    Dim keyValue As String
    
    ' 定义工作表
    Set wsSource = ThisWorkbook.Sheets("源Sheet页")
    Set wsTarget = ThisWorkbook.Sheets("目标Sheet页")
    
    ' 定义需要查找的列和目标列
    sourceColumn = "F"
    keyCol = "B"
    ' 定义要拷贝的列
    targetColumns = Array("F", "I", "J", "K", "L", "M", "N")
    
    ' 两个Sheet页相同列内容,通过该列匹配复制表格
    targetName = "XXX"
    
    ' 找到源工作表和目标工作表中最后一行
    lastRowSource = wsSource.Cells(wsSource.Rows.Count, keyCol).End(xlUp).Row
    lastRowTarget = wsTarget.Cells(wsTarget.Rows.Count, keyCol).End(xlUp).Row
    
    ' 循环遍历源工作表中的每一行(从第二行开始)
    For i = 2 To lastRowSource
        If wsSource.Cells(i, sourceColumn).Value = targetName Then
            keyValue = wsSource.Cells(i, keyCol).Value
            
            ' 在目标工作表中找到对应的行
            Set foundCell = wsTarget.Columns(keyCol).Find(What:=keyValue, LookIn:=xlValues, LookAt:=xlWhole)
            If Not foundCell Is Nothing Then
                targetRow = foundCell.Row
                
                ' 直接复制指定的列数据到目标工作表的对应列和行数
                For j = LBound(targetColumns) To UBound(targetColumns)
                    wsTarget.Cells(targetRow, targetColumns(j)).Value = wsSource.Cells(i, targetColumns(j)).Value
                Next j
            End If
        End If
    Next i
    
    ' 提示完成
    MsgBox "数据复制完成"
End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值