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

基于多条件If Then语句的Excel跨工作表数值迁移VBA实现需求

满足条件时复制Master工作表数据到Bun_Dept的VBA实现

原代码存在的问题

  • 变量声明不规范:Dim Data, Bun, Bun_Dept, Master As Worksheet 中仅Master被声明为Worksheet类型,其余变量默认是Variant类型,需逐个明确类型
  • 循环逻辑错误:原代码先遍历完所有i再执行条件判断,此时i的值已经超出循环范围,无法正确获取目标行数据;j的循环为空操作,没有起到定位写入行的作用
  • 消息框使用错误:MsgBox ("Data.Cells(i, 1).Value") 会直接输出字符串而非单元格实际值,且位置错误
  • 未处理写入行的递增:每次写入数据后需要将j加1,避免覆盖之前的内容

修复后的完整代码

Sub CopyFilteredValues()
    Dim wb As Workbook
    Dim Data As Worksheet, Bun As Worksheet
    Dim lastrow As Long, j As Long
    Dim i As Integer
    
    ' 初始化工作表对象
    Set Data = ThisWorkbook.Worksheets("Master")
    Set Bun = ThisWorkbook.Worksheets("Bun_Dept")
    
    ' 获取Bun_Dept工作表中B列最后一行,作为写入起始行(从第4行开始,若已有数据则接在后面)
    j = Bun.Cells(Rows.Count, "B").End(xlUp).Row
    ' 如果起始行小于4,则从第4行开始写入
    If j < 4 Then j = 4
    
    ' 遍历Master工作表第5行到最后一行的数据
    lastrow = Data.Cells(Rows.Count, "A").End(xlUp).Row
    For i = 5 To lastrow
        ' 判断当前行是否满足条件
        If Data.Cells(i, 7).Value = "Location" And _
           Data.Cells(i, 18).Value = "BUN" And _
           Data.Cells(i, 73).Value <> "" Then
           
            ' 复制指定单元格数据到Bun_Dept对应位置
            Bun.Cells(j, 2).Value = Data.Cells(i, 1).Value
            Bun.Cells(j, 3).Value = Data.Cells(i, 2).Value
            Bun.Cells(j, 4).Value = Data.Cells(i, 4).Value
            Bun.Cells(j, 5).Value = Data.Cells(i, 5).Value
            Bun.Cells(j, 6).Value = Data.Cells(i, 58).Value
            Bun.Cells(j, 7).Value = Data.Cells(i, 59).Value
            Bun.Cells(j, 8).Value = Data.Cells(i, 26).Value
            Bun.Cells(j, 9).Value = Data.Cells(i, 25).Value
            Bun.Cells(j, 12).Value = Data.Cells(i, 73).Value
            Bun.Cells(j, 13).Value = Data.Cells(i, 74).Value
            
            ' 弹出当前复制的行ID(可选,可删除)
            MsgBox "已复制行ID:" & Data.Cells(i, 1).Value
            ' 写入行号递增,准备下一次写入
            j = j + 1
        End If
    Next i
    
    MsgBox "数据复制完成!"
End Sub

关键修改说明

  • 规范变量声明:明确Data和Bun为Worksheet类型,避免Variant类型带来的潜在问题
  • 调整循环逻辑:将条件判断放入i的循环内,确保每一行都被检查;初始化j为Bun_Dept的最后一行,每次写入后递增
  • 修正消息框:输出实际单元格值而非字符串,添加完成提示
  • 增加边界处理:当Bun_Dept的B列没有数据时,从第4行开始写入,符合原代码的起始行要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:06:18