如何编写脚本实现从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
相关产品推荐
相关产品推荐

