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

如何将复制G列含‘Lejárt’行的VBA代码转换为Office Script?

将VBA代码转换为Office Script:复制指定行到另一工作表

以下是完全匹配你原VBA功能的Office Script代码:

function main(workbook: ExcelScript.Workbook) {
    // 获取目标工作表对象
    const munka1 = workbook.getWorksheet("Munka1");
    const munka2 = workbook.getWorksheet("Munka2");

    // 获取Munka1的最后一行行号(Excel行号从1开始,Office Script索引从0开始,需加1转换)
    const lastRowMunka1 = munka1.getUsedRange().getLastRow().getRowIndex() + 1;

    // 遍历第2行到最后一行(跳过表头行)
    for (let i = 2; i <= lastRowMunka1; i++) {
        // 获取G列(第7列)的单元格值,转换为0起始索引:行i对应i-1,列7对应6
        const cellValue = munka1.getCell(i - 1, 6).getValue();

        // 判断单元格值是否为"Lejárt"
        if (cellValue === "Lejárt") {
            // 获取当前要复制的整行
            const rowToCopy = munka1.getRow(i - 1);

            // 获取Munka2的最后一行行号,若工作表为空则默认从第1行开始
            const lastRowMunka2 = munka2.getUsedRange() ? munka2.getUsedRange().getLastRow().getRowIndex() + 1 : 1;

            // 将行复制到Munka2的下一行,保留所有格式和内容
            rowToCopy.copyTo(
                munka2.getRow(lastRowMunka2),
                ExcelScript.RangeCopyType.all
            );
        }
    }
}

代码与原VBA的对应逻辑说明

  • 获取工作表:workbook.getWorksheet("Munka1") 对应VBA的 Worksheets("Munka1")
  • 获取最后一行:getUsedRange().getLastRow().getRowIndex() + 1 对应VBA的 Cells(Rows.Count, 1).End(xlUp).Row,解决了Office Script的0索引与Excel1起始行号的转换问题
  • 遍历行:for (let i = 2; i <= lastRowMunka1; i++) 对应VBA的 For i = 2 To a,跳过表头行只处理数据行
  • 判断单元格值:getCell(i - 1, 6).getValue() 对应VBA的 Cells(i, 7).Value,完成索引转换
  • 复制粘贴:rowToCopy.copyTo(...) 替代VBA的激活工作表、选中单元格、粘贴操作,Office Script直接通过对象交互完成,无需界面操作
  • 省略冗余操作:Office Script是后台执行脚本,无需取消剪切复制模式或选中单元格,因此删除了原VBA中对应的交互代码

使用步骤

  1. 打开Excel网页版(或新版桌面端Excel)
  2. 点击顶部菜单栏自动化 -> 脚本编辑器
  3. 新建空白脚本,粘贴上述代码
  4. 保存脚本后点击运行即可执行

内容的提问来源于stack exchange,提问作者András Gyenes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:45:56