快速定位数字单元格所在行号

实例需求:工作表中数据位于A1:A17(可能存在空单元格),现在需要定位其最后一个数字单元格的位置,注意需要忽略文本数字单元格(单元格左上角有绿色三角标识),即A9和A14不符合要求。

B列备注为了说明A列内容属性,C列为了展示哪些单元格包含公式。

在这里插入图片描述

示例代码如下。

Sub LocateNumberCell()
    Const DATA_RNG = "A1:A17"
    Dim rngConstant As Range, rngFormula As Range
    Dim rowConstatnt As Long, rowFormula As Long, iRow As Long
    On Error Resume Next
    Set rngConstant = Range(DATA_RNG).SpecialCells(xlCellTypeConstants, 1)
    Set rngFormula = Range(DATA_RNG).SpecialCells(xlCellTypeFormulas, 1)
    On Error GoTo 0
    If rngConstant Is Nothing Then
        rowConstatnt = 0
    Else
        With rngConstant.Areas(rngConstant.Areas.Count)
            rowConstatnt = .Cells(.Cells.Count).Row
        End With
    End If
    If rngFormula Is Nothing Then
        rowFormula = 0
    Else
        With rngFormula.Areas(rngFormula.Areas.Count)
            rowFormula = .Cells(.Cells.Count).Row
        End With
    End If
    iRow = Application.Max(rowConstatnt, rowFormula)
    If iRow = 0 Then
        MsgBox DATA_RNG & "中没有数字"
    Else
        MsgBox "最后一个数字位于单元格A" & iRow
    End If
End Sub

【代码解析】
第2行代码指定数据区域范围。
第5行代码忽略第6和7行代码可能产生的运行时错误。
第6行代码获取指定数据区域的常量数字单元格。
第7行代码获取指定数据区域的公式结果为数字的单元格。
第8行代码恢复错误处理机制。
第9行代码判断rngConstant是否为Nothing。

  • 如果条件成立,说明第6行代码未定位到相应的单元格,第17行代码将变量rowFormula设置为零。
  • 如果条件不成立,说明第6行代码找到了到符合要求的单元格,第12~14行代码获取最后一个单元格的行号。
    由于rngConstant可能是由多个不连续单元格区域组成的,因此不能使用如下代码获取最后一个单元格的行号。
rowConstatnt=rngConstant.Cells(rngConstant.Cells.Count).Row`

第16~22行代码使用类似的代码结构和逻辑,此处不再赘述。
第23行代码调用工作表函数获取两个行号的最大值,即更靠下的单元格行号。
第24行代码判断行号是否为零。

  • 如果条件成立,说明没有数字单元格,第25行代码输出提示信息。
  • 如果条件不成立,第27行代码输出最后数字单元格的引用地址。

运行代码结果如下图所示。

在这里插入图片描述


使用倒序遍历单元格区域的方法也可以定位数字单元格,需要提醒大家需要的是,对于空单元格IsNumeric()函数返回值为True,解决方法方法是使用如下组合条件。

Not Vba.IsEmpty(Range("A1")) And Vba.IsNumeric(Range("A1"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值