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

请求编写Google Sheets脚本:按条件跨表复制数据并更新状态

VBA脚本实现跨工作表数据处理需求

以下是满足需求的VBA脚本,可直接在Excel中使用:

Sub ProcessEmailData()
    Dim wsCurrent As Worksheet
    Dim wsEmail As Worksheet
    Dim lastRow As Long
    Dim i As Long
    
    ' 绑定目标工作表
    Set wsCurrent = ThisWorkbook.Worksheets("Current")
    Set wsEmail = ThisWorkbook.Worksheets("Email")
    
    ' 获取Current表A列最后一个非空行的行号
    lastRow = wsCurrent.Cells(wsCurrent.Rows.Count, "A").End(xlUp).Row
    
    ' 逐行遍历处理
    For i = 1 To lastRow
        ' 判断当前行D列是否为空
        If wsCurrent.Cells(i, "D").Value = "" Then
            ' 将Current表B列值覆盖写入Email表A1单元格
            wsEmail.Range("A1").Value = wsCurrent.Cells(i, "B").Value
            ' 在Current表D列标记处理状态
            wsCurrent.Cells(i, "D").Value = "email sent"
        End If
    Next i
    
    ' 释放对象资源
    Set wsCurrent = Nothing
    Set wsEmail = Nothing
End Sub

代码说明

  • 工作表绑定:通过Set语句直接关联指定工作表,避免因工作表名称变更或激活状态变化导致的错误。
  • 动态获取遍历范围:用End(xlUp)定位最后一行,确保只处理有数据的行,不会遍历空白区域。
  • 核心逻辑:
    • 检查D列单元格内容,为空则执行后续操作;
    • 直接赋值实现覆盖效果,比复制粘贴操作更高效;
    • 标记处理状态,防止重复执行操作。

可选调整

如果需要将符合条件的B列值追加到Email表A列(而非每次覆盖A1),可将赋值代码修改为:

wsEmail.Cells(wsEmail.Rows.Count, "A").End(xlUp).Offset(1, 0).Value = wsCurrent.Cells(i, "B").Value

这样会从Email表A列最后一个非空行的下一行开始写入数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:12:12