Excel VBA需求:删除指定列含0行并自动填充日期至最后行
Excel宏功能修复:删除指定行、填充日期及自动填充
需求说明
无法在目标Excel文件中编写宏,通过另一个存储宏的文件实现以下操作:
- 删除选中单元格左侧列中包含“0”的所有行
- 向选中单元格填充当日日期(格式
yymmdd) - 将选中单元格的内容下拉填充至数据区域最后一行
现有代码中,获取最后行号和自动填充的逻辑失效,以下是修正方案:
修正后的完整代码
Private Sub CommandButton4_Click() Dim RngSelected As Range Dim dtToday As String Dim LastRow As Long Dim ColLeft As Long Dim i As Long dtToday = Format(Date, "yymmdd") ' 让用户选择目标范围 Set RngSelected = Application.InputBox(Title:="请选择目标范围", Prompt:="选择需要填充日期的单元格范围", Type:=8) ' 填充日期到选中范围 RngSelected.Value = dtToday ' 获取选中单元格左侧列的列号 ColLeft = RngSelected.Column - 1 ' 获取左侧列的最后非空行号 LastRow = Cells(Rows.Count, ColLeft).End(xlUp).Row ' 从下往上删除左侧列含"0"的行(避免跳行) For i = LastRow To 1 Step -1 If Cells(i, ColLeft).Value = "0" Or Cells(i, ColLeft).Value = 0 Then Rows(i).Delete End If Next i ' 更新最后行号(删除行后重新计算) LastRow = Cells(Rows.Count, ColLeft).End(xlUp).Row ' 自动填充选中列到最后一行 If RngSelected.Cells(1).Row < LastRow Then RngSelected.Cells(1).AutoFill _ Destination:=Range(RngSelected.Cells(1), Cells(LastRow, RngSelected.Column)) End If End Sub
关键修复点说明
获取最后行号
原代码Range(ColC & Rows.Count).End(xlUp).Row写法错误,列号不能直接与行号拼接。修正为Cells(Rows.Count, ColLeft).End(xlUp).Row,通过Cells(行号, 列号)的方式准确定位左侧列的最后非空单元格。删除行逻辑
新增从下往上遍历删除的逻辑(For i = LastRow To 1 Step -1),避免删除行后导致后续行号错位,确保所有含"0"的行都被正确删除。自动填充修正
原代码的AutoFill范围构造错误,修正为以选中范围的第一个单元格为起点,到同列最后行号的单元格为终点的范围,确保填充范围正确。同时增加判断,避免选中行已经是最后一行时触发错误。
内容的提问来源于stack exchange,提问作者user17269242
相关产品推荐
相关产品推荐

