VBA快速填充缺失数据

实例需求:数据表中F列中存在数据缺失,如下图所示。现需要根据A列中的内容(类别,图中C1、C2、B1为不同类别),补充F列数据,已知每个类别中F列存在不少于一个非空单元格,并且其内容相同。

在这里插入图片描述

示例代码如下。

Sub Demo()
    Dim rngF As Range, arrData, i As Long
    Dim RowCnt As Long
    arrData = [a1].CurrentRegion.Value
    RowCnt = UBound(arrData)
    For i = 2 To RowCnt
        If arrData(i, 1) <> arrData(i - 1, 1) Then
            If Len(arrData(i, 6)) = 0 Then
                Cells(i, 6) = Cells(i, 6).End(xlDown)
            End If
        End If
    Next
    With Range("F2").Resize(RowCnt - 1, 1)
        .NumberFormatLocal = "G/通用格式"
        .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
        .Formula = .Value
    End With
End Sub

【代码解析】
第4行代码将数据表加载到数组中。
第5行代码获取数据表的行数。
第6~12行代码从第二行开始循环遍历数据,确保每个类别的首行记录F列不为空,这样才能确保后续公式填充的结果是正确的。
如果当前行A列单元格不等于上一行A列单元格,则为一个新类别的首行数据记录,第8行代码判断其F列是否为空,如果为空,第9行代码使用当前行之下的第一个非空单元格填充当前行单元格。
第14行代码设置单元格区域数字格式为通用。
第15行代码使用SpecialCells(xlCellTypeBlanks)筛选数据表中F列的空白单元格,并设置公式为等于其上的相邻单元格。
第16行代码将F列中的公式转换为静态数值。


使用数组+字典的方式也可以实现本需求,本文只是展示另外一个实现思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值