请求调整VBA代码:从最后一行向上填充空单元格并解决末尾重复问题
解决VBA填充A列空单元格时末尾重复的问题
现有需求:用VBA查找A列空单元格,并将其上方单元格内容填充进去,但运行后表格末尾会出现重复内容(最初约20次,修改后仍有1次),需要结合从最后一行向上遍历的逻辑调整代码。
当前可正常运行(除末尾重复问题)的代码
Sub Five() Dim cell As Range, SearchRange As Range On Error Resume Next Set SearchRange = Columns("A").SpecialCells(xlCellTypeBlanks) On Error GoTo 0 If Not SearchRange Is Nothing Then For Each cell In SearchRange If cell.Row > 1 Then cell = cell.Offset(-1, 0).Value Next cell End If End Sub
可实现从最后一行向上遍历的代码片段
Dim LR As Long, i As Long LR = Range("A" & Rows.Count).End(xlUp).Row For i = LR To 1 Step -1
尝试过的修改代码(仍有末尾1次重复)
Sub Five() Dim cell As Range, SearchRange As Range Dim LR As Long, i As Long LR = Range("F" & Rows.Count).End(xlUp).Row On Error Resume Next Set SearchRange = Columns("A").SpecialCells(xlCellTypeBlanks) On Error GoTo 0 If Not SearchRange Is Nothing Then For Each cell In SearchRange If cell.Row > 1 Then cell = cell.Offset(-1, 0).Value Next cell End If End Sub
修正后的代码
直接采用从下往上遍历的逻辑,避免选中数据区域外的空单元格:
Sub FillBlanksUpwards() Dim LR As Long, i As Long ' 获取A列最后一行有数据的行号 LR = Range("A" & Rows.Count).End(xlUp).Row ' 从最后一行向上遍历到第2行(避免越界) For i = LR To 2 Step -1 ' 仅处理数据区域内的空单元格 If IsEmpty(Cells(i, "A")) Then Cells(i, "A").Value = Cells(i - 1, "A").Value End If Next i End Sub
修正逻辑说明
原代码使用SpecialCells(xlCellTypeBlanks)会选中整个A列的所有空单元格,包括数据区域下方的空白行,导致最后一行数据被重复填充到这些空白行中。而从下往上遍历仅处理到A列最后一个有数据的行,不会触及下方空白区域,彻底解决末尾重复问题。
内容的提问来源于stack exchange,提问作者Nora
相关产品推荐
相关产品推荐

