Excel VBA获取指定列(示例C列)最后一行问题求助
Excel VBA 获取指定列最后一行并跨工作簿粘贴数据
要实现将工作簿1的数据粘贴到工作簿2的C列末尾,核心是准确获取C列的最后一行。你的原代码存在逻辑偏差,以下是修正方案:
问题分析
原代码中lastRow = lDestLastRow.Rows(lDestLastRow.Columns.Count).Column这行逻辑错误——你试图通过CurrentRegion的列数推导行号,完全偏离目标;另外你已经写出了获取C列最后一行的正确基础写法last = ws2.Cells(ws2.Rows.Count, "C").End(xlUp).Row,但可能因后续代码未正确使用该值,或数据格式(如空值、隐藏行)导致结果不符合预期。
修正后的完整代码
Sub CopyData() Dim ws1 As Worksheet, ws2 As Worksheet Dim lCopyLastRow As Long Dim lDestLastRow As Long ' 改为Long类型存储行号,无需用Range ' 绑定目标工作表,确保两个工作簿已打开 Set ws1 = Workbooks("u_change_outage_mapping.xlsx").Worksheets("Raw") Set ws2 = Workbooks("Checker_20230119-20220125_V1.xlsx").Worksheets("Checker(Combined)") ' 获取工作簿1中A列最后一行(待复制数据的范围) lCopyLastRow = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row ' 获取工作簿2中C列最后一行,+1是为了粘贴到下一行空白处,避免覆盖已有数据 lDestLastRow = ws2.Cells(ws2.Rows.Count, "C").End(xlUp).Row + 1 ' 执行复制粘贴操作(示例:复制ws1的A列数据到ws2的C列) ws1.Range("A1:A" & lCopyLastRow).Copy Destination:=ws2.Range("C" & lDestLastRow) ' 调试输出验证行号 Debug.Print "工作簿1A列最后一行:" & lCopyLastRow Debug.Print "工作簿2C列粘贴起始行:" & lDestLastRow End Sub
关键说明
- 获取指定列最后一行的标准可靠写法:
工作表.Cells(工作表.Rows.Count, "列标").End(xlUp).Row,该方法会从列的最底部向上定位第一个非空单元格。 - 如果C列存在空值但需要包含所有已编辑过的行,可改用
ws2.UsedRange.Rows.Count,但注意UsedRange会包含所有曾编辑过的单元格区域,可能存在冗余范围。
内容的提问来源于stack exchange,提问作者Faisal Mohammed
相关产品推荐
相关产品推荐

