求助:Sheet1指定区域数据导入Sheet14的VBA代码问题
问题分析与代码修正
原代码存在的问题
- 数据范围定义错误:
Set Database = Sheet14.Range("A1:I1")仅选中了Sheet14的第一行,后续计算最后一行时基于这个小范围,导致逻辑混乱。 - 仅复制第一列数据:循环中只取
New_Input.Cells(i, 1)(即Sheet1的C列),没有处理K列在内的其他列。 - 列对应逻辑错误:将第一列数据写入
Database.Cells(Last_Row, i),会把第i行的第一列数据写到Sheet14的第i列,完全不符合整行复制的需求。 - 最后一行查找效率低:用
While循环逐行判断,不如直接用Excel内置的End(xlUp)方法高效准确。
修正后的代码
Sub Save() Dim wsSource As Worksheet, wsTarget As Worksheet Dim sourceRange As Range Dim lastRowTarget As Long Dim i As Long, j As Long ' 定义工作表对象,提高可读性 Set wsSource = ThisWorkbook.Sheets("Sheet1") Set wsTarget = ThisWorkbook.Sheets("Sheet14") ' 定义要复制的源数据范围 Set sourceRange = wsSource.Range("C6:K105") ' 找到Sheet14中A列最后一个非空行,下一行就是要写入的起始行 lastRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row + 1 ' 遍历源数据的每一行 For i = 1 To sourceRange.Rows.Count ' 检查当前行第一列是否非空(保留原逻辑的过滤条件) If sourceRange.Cells(i, 1).Value <> "" Then ' 遍历当前行的每一列,复制到目标工作表 For j = 1 To sourceRange.Columns.Count wsTarget.Cells(lastRowTarget, j).Value = sourceRange.Cells(i, j).Value Next j ' 每复制一行,目标行号加1 lastRowTarget = lastRowTarget + 1 End If Next i End Sub
代码说明
- 工作表对象定义:用
wsSource和wsTarget明确源和目标工作表,避免代码歧义。 - 准确查找目标行:通过
wsTarget.Rows.Count结合End(xlUp)快速定位最后非空行,比循环判断更高效可靠。 - 整行数据复制:嵌套循环处理每行的所有列,确保C6:K105的所有列数据都被复制到Sheet14的对应列。
- 过滤空行:保留原代码中“仅复制第一列非空的行”的逻辑,若不需要过滤可直接删除
If判断块,改为直接复制所有行。
内容的提问来源于stack exchange,提问作者Felix Angcap Jr
相关产品推荐
相关产品推荐

