请求编写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
相关产品推荐
相关产品推荐

