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

如何将特定值的单元格数据复制到其他工作表?VBA代码求助

VBA代码修改:按A列值分表复制数据

原代码存在的问题

  • 循环逻辑错误:遍历单元格时,只要遇到值为1的单元格,就把Sheet1的整个A2:A81区域赋值给Sheet3的C2:C81,最终只会覆盖出最后一次的结果,完全没实现“只复制值为1的单元格”的需求
  • 未处理值为2的情况,也没有将值为1的数据放到Sheet2的A列

基础循环版代码(适合新手理解)

Sub Mandat1_Click()
    Dim wsSource As Worksheet
    Dim wsDest1 As Worksheet
    Dim wsDest2 As Worksheet
    Dim sourceRange As Range
    Dim cell As Range
    Dim lastRowDest1 As Long
    Dim lastRowDest2 As Long
    
    ' 绑定工作表对象,用表名代替索引,避免工作表顺序变动出错
    Set wsSource = ThisWorkbook.Sheets("Sheet1")
    Set wsDest1 = ThisWorkbook.Sheets("Sheet2")
    Set wsDest2 = ThisWorkbook.Sheets("Sheet3")
    
    ' 清空目标表A列的旧数据(从第2行开始,假设第1行是表头)
    wsDest1.Range("A2:A" & wsDest1.Cells(wsDest1.Rows.Count, "A").End(xlUp).Row).ClearContents
    wsDest2.Range("A2:A" & wsDest2.Cells(wsDest2.Rows.Count, "A").End(xlUp).Row).ClearContents
    
    ' 动态获取Sheet1中A列有数据的最后一行,不用固定A2:A81
    Set sourceRange = wsSource.Range("A2:A" & wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row)
    
    ' 遍历每个源数据单元格
    For Each cell In sourceRange
        ' 获取目标表A列的下一个空行位置
        lastRowDest1 = wsDest1.Cells(wsDest1.Rows.Count, "A").End(xlUp).Row + 1
        lastRowDest2 = wsDest2.Cells(wsDest2.Rows.Count, "A").End(xlUp).Row + 1
        
        Select Case cell.Value
            Case 1
                ' 将值为1的单元格内容复制到Sheet2的A列空行
                wsDest1.Cells(lastRowDest1, "A").Value = cell.Value
            Case 2
                ' 将值为2的单元格内容复制到Sheet3的A列空行
                wsDest2.Cells(lastRowDest2, "A").Value = cell.Value
        End Select
    Next cell
End Sub

高效筛选版代码(适合数据量大的场景)

如果Sheet1的A列数据很多,循环遍历会比较慢,用AutoFilter筛选后批量复制更高效:

Sub Mandat1_Click_Fast()
    Dim wsSource As Worksheet
    Dim wsDest1 As Worksheet
    Dim wsDest2 As Worksheet
    Dim sourceRange As Range
    Dim lastRowSource As Long
    
    Set wsSource = ThisWorkbook.Sheets("Sheet1")
    Set wsDest1 = ThisWorkbook.Sheets("Sheet2")
    Set wsDest2 = ThisWorkbook.Sheets("Sheet3")
    
    ' 清空目标表旧数据
    wsDest1.Range("A2:A" & wsDest1.Cells(wsDest1.Rows.Count, "A").End(xlUp).Row).ClearContents
    wsDest2.Range("A2:A" & wsDest2.Cells(wsDest2.Rows.Count, "A").End(xlUp).Row).ClearContents
    
    ' 获取Sheet1 A列最后一行有数据的位置
    lastRowSource = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
    Set sourceRange = wsSource.Range("A1:A" & lastRowSource) ' 包含表头
    
    ' 筛选值为1的行,复制到Sheet2的A列
    sourceRange.AutoFilter Field:=1, Criteria1:=1
    sourceRange.Offset(1).SpecialCells(xlCellTypeVisible).Copy wsDest1.Cells(wsDest1.Rows.Count, "A").End(xlUp).Offset(1)
    wsSource.AutoFilterMode = False ' 关闭筛选
    
    ' 筛选值为2的行,复制到Sheet3的A列
    sourceRange.AutoFilter Field:=1, Criteria1:=2
    sourceRange.Offset(1).SpecialCells(xlCellTypeVisible).Copy wsDest2.Cells(wsDest2.Rows.Count, "A").End(xlUp).Offset(1)
    wsSource.AutoFilterMode = False
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:21:31