如何用VBA循环将指定单元格内容写入另一工作簿首个空行
问题:跨工作簿复制数据到目标列的下一个空行
需求明确:
- 遍历
QuartalReport.xlsm的A列(数据从第3行开始),当A列单元格为空时,复制对应行B列的值 - 将复制的值写入
ClientList.xlsm的C列下一个空行(从C2开始,首行为表头) - 源工作簿保持不变,目标列最终无空行
修正后的完整代码
Sub CopyToNextEmptyRow() ' 定义源工作簿和工作表 Dim wbSource As Workbook: Set wbSource = Workbooks("QuartalReport.xlsm") Dim wsSource As Worksheet: Set wsSource = wbSource.Worksheets(1) ' 定义源数据范围:A列从第3行到已用区域最后一行 Dim sourceCol As Range Set sourceCol = wsSource.Range("A3:A" & wsSource.UsedRange.Rows(wsSource.UsedRange.Rows.Count).Row) ' 定义目标工作簿和工作表 Dim wbTarget As Workbook: Set wbTarget = Workbooks("ClientList.xlsm") Dim wsTarget As Worksheet: Set wsTarget = wbTarget.Worksheets(1) Dim targetCell As Range Dim cell As Range ' 遍历源列单元格 For Each cell In sourceCol.Cells ' 判断源A列单元格是否为空(排除仅含空格的情况) If Trim(cell.Value) = "" Then ' 找到目标C列的下一个空行 Set targetCell = wsTarget.Cells(wsTarget.Rows.Count, "C").End(xlUp) ' 处理表头行的特殊情况:如果C1是表头且C2为空,直接定位到C2 If targetCell.Row = 1 Then Set targetCell = wsTarget.Range("C2") Else Set targetCell = targetCell.Offset(1, 0) End If ' 复制源B列的值到目标单元格 targetCell.Value = cell.Offset(0, 1).Value End If Next cell End Sub
关键说明
- 定位目标列空行:
用wsTarget.Cells(wsTarget.Rows.Count, "C").End(xlUp)从C列最后一行向上查找第一个非空单元格,再偏移一行得到下一个空行;额外判断如果停在第1行(表头行),直接定位到C2,避免覆盖表头。 - 源范围优化:
直接指定源A列从第3行开始到已用区域最后一行,减少无效遍历。 - 变量命名修正:
避免重复使用column变量,改用sourceCol和targetCell,代码更易读。 - 空值判断:
用Trim(cell.Value) = ""排除单元格仅含空格的情况,判断更准确。
内容的提问来源于stack exchange,提问作者Aline
相关产品推荐
相关产品推荐

