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

如何编写脚本实现从A(A1,G4)复制数据到B(A6,G9)并跳过空白单元格

实现Excel非空单元格定向复制的VBA脚本

要完成从A1:G4复制到A6:G9且跳过空单元格的需求,直接用VBA遍历单元格判断即可,代码简洁且可控:

Sub CopyNonBlankCells()
    Dim sourceRange As Range
    Dim targetStartCell As Range
    Dim cell As Range
    
    ' 定义源区域和目标起始单元格
    Set sourceRange = ThisWorkbook.ActiveSheet.Range("A1:G4")
    Set targetStartCell = ThisWorkbook.ActiveSheet.Range("A6")
    
    ' 遍历源区域每个单元格
    For Each cell In sourceRange
        ' 判断单元格非空(排除null、空文本、仅含空格的情况)
        If Not IsEmpty(cell) And Trim(cell.Value) <> "" Then
            ' 计算目标单元格位置:保持源单元格与目标区域的相对位置一致
            targetStartCell.Offset(cell.Row - sourceRange.Row, cell.Column - sourceRange.Column).Value = cell.Value
        End If
    Next cell
End Sub

代码说明

  • sourceRange 指定要复制的源区域A1:G4,targetStartCell 指定目标区域的起始单元格A6
  • 循环中通过Not IsEmpty(cell) And Trim(cell.Value) <> ""过滤所有无效空值
  • 用Offset计算目标单元格位置,确保源单元格和目标单元格的相对位置完全匹配

如果是在Google Sheets中实现相同需求,用Apps Script的代码如下:

function copyNonBlankCells() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const sourceRange = sheet.getRange("A1:G4");
  const sourceValues = sourceRange.getValues();
  const targetRange = sheet.getRange("A6:G9");
  const targetValues = targetRange.getValues();
  
  // 遍历二维数组,仅替换非空值
  for (let i = 0; i < sourceValues.length; i++) {
    for (let j = 0; j < sourceValues[i].length; j++) {
      const value = sourceValues[i][j];
      if (value !== "" && value !== null) {
        targetValues[i][j] = value;
      }
    }
  }
  
  // 将修改后的目标值批量写回表格
  targetRange.setValues(targetValues);
}

Google Sheets版说明

  • 先读取源和目标区域的所有值到二维数组,修改后一次性写回,比逐个单元格操作效率更高
  • 同样判断值非空且非null,保留原目标区域的空单元格内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 17:37:08