VBA查找列最后一行:现有代码异常及优化方案咨询
解决VBA中Range.End(xlDown)的边界报错问题
原代码:
Range("C31").Select Selection.End(xlDown).Offset(1, 0).Select
该代码在C31区域有2行及以上数据时运行正常,但当C31仅含1行数据时,End(xlDown)会定位到工作表底部,执行Offset(1,0)会因超出范围报错。以下是符合需求的简洁IF判断替代代码:
方案一:直接判断相邻单元格状态
If Range("C32").Value = "" Then Range("C31").Offset(1, 0).Select Else Range("C31").End(xlDown).Offset(1, 0).Select End If
方案二:用With语句简化代码(更严谨)
With Range("C31") ' 检查C31下一行是否为空,判断是否仅1行数据 If .Offset(1, 0).Value = "" Then .Offset(1, 0).Select Else .End(xlDown).Offset(1, 0).Select End If End With
逻辑说明:
- 当C31仅1行数据时,其下一行(C32)为空,直接选中C32;
- 当C31下方有连续数据时,用
End(xlDown)定位到数据最后一行,再选中其下一行。
内容的提问来源于stack exchange,提问作者Gurenn
相关产品推荐
相关产品推荐

