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

如何编写Script将动态变化单元格区域复制到固定目标位置

动态固定尺寸区域复制脚本方案

已知固定规则

  • 所有源区域统一尺寸:5列 × 43行
  • 复制目标位置固定:Shop!A80
  • 源区域全部位于Jobsheet工作表,从给出的示例(B2:F44、L2:P44)可确认源区域起始行固定为第2行,仅起始列动态变化。

方案1:手动指定源起始列(适配多源区域切换场景)

每次复制前仅需修改1个列号参数,即可切换待复制的源区域,稳定性最高。

Google Apps Script 版本

function copyDynamicRange() {
  // 修改此处列号即可切换源区域:B列填2,L列填12,以此类推
  const sourceStartCol = 2;
  const sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Jobsheet");
  const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Shop");
  // 定位固定尺寸的源区域
  const sourceRange = sourceSheet.getRange(2, sourceStartCol, 43, 5);
  // 复制到固定目标位置,保留格式、公式、数据验证
  sourceRange.copyTo(targetSheet.getRange("A80"));
  
  // 若仅需复制纯值,注释上面的copyTo行,改用下面两行代码,执行速度更快
  // const sourceValues = sourceRange.getValues();
  // targetSheet.getRange("A80").offset(0, 0, 43, 5).setValues(sourceValues);
}

Excel VBA 版本

Sub CopyDynamicRange()
    ' 修改此处列号即可切换源区域:B列填2,L列填12,以此类推
    Const sourceStartCol As Integer = 2
    Dim sourceSheet As Worksheet, targetSheet As Worksheet
    Set sourceSheet = ThisWorkbook.Worksheets("Jobsheet")
    Set targetSheet = ThisWorkbook.Worksheets("Shop")
    
    Dim sourceRange As Range
    Set sourceRange = sourceSheet.Cells(2, sourceStartCol).Resize(43, 5)
    ' 复制内容和格式到固定目标
    sourceRange.Copy targetSheet.Range("A80")
    
    ' 若仅需复制纯值,注释上面的Copy行,改用下面代码
    ' targetSheet.Range("A80").Resize(43, 5).Value = sourceRange.Value
End Sub

方案2:自动识别有效源区域(无需手动改参数)

如果每次执行复制时,Jobsheet中仅有一个符合尺寸要求的有效数据块,可以用脚本自动定位源区域,无需手动修改参数:

function autoCopyDetectedRange() {
  const sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Jobsheet");
  const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Shop");
  const maxCol = sourceSheet.getDataRange().getLastColumn();
  
  // 从左到右遍历列,定位第一个符合尺寸的非空源区域
  for (let col = 1; col <= maxCol; col++) {
    const checkRange = sourceSheet.getRange(2, col, 43, 5);
    // 判断规则:源区域左上角单元格非空即判定为目标区域,可根据实际业务调整判断逻辑
    if (checkRange.getCell(1,1).getValue() !== "") {
      checkRange.copyTo(targetSheet.getRange("A80"));
      break;
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:48:25