• VBA如何快速识别Excel单元格中的文本数字


    Excel中一种非常特殊的数字,这些数字看似数字,其实是文本格式(下文简称为文本数字),在单元格的左上角会有一个绿色小三角作为标志,如B1:B3单元格。
    在这里插入图片描述

    在编程时为什么需要区分普通数字和文本数字呢?先来看以下【立即窗口】种的测试代码。A1和B1单元格内容看似相同,但是测试代码的结果却完全不同。

    • 单元格A1为普通数字,加号之后的"0"被转换为数字零,然后进行加法运算。
    • 单元格B1为文本数字,加号作为字符串连接运算符,合并两个字符串。
    ?[A1]+"0"
     1 
    ?[B1]+"0"
    10
    
    • 1
    • 2
    • 3
    • 4

    VBA代码并无法识别单元格坐上角的绿色三角标志,或者说Range对象并没有一个属性值对应这个标志,但是可用通过自定义函数来区分这两种数字格式。

    Function IsNumberStoredAsText(Rng As Range) As Variant
        If Not IsNumeric(Rng) Then
            IsNumberStoredAsText = vbNullChar
            Exit Function
        End If
        If Rng.Value + "0" = Rng.Value Then
            IsNumberStoredAsText = vbNo
        Else
            IsNumberStoredAsText = vbYes
        End If
    End Function
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    【代码解析】
    第2行代码判断单元格内容是否为数字,如果不是数字则第3行代码返回vbNullChar
    第6行代码利用+ "0"运算来判别单元格中数字格式,如果运算结果与单元格的值相等,第7行代码返回vbNo,即单元格内容为普通数字,如果不等,第9行代码返回vbYes,即单元格内容为文本数字。


    测试代码如下。

    Sub DEMO()
        Dim c As Range, sMsg As String
        For Each c In Range("A1:B4").Cells
            Select Case IsNumberStoredAsText(c)
            Case Is = vbNullChar
                sMsg = "非数字"
            Case Is = vbYes
                sMsg = "文本数字"
            Case Is = vbNo
                sMsg = "普通数字"
            End Select
            Debug.Print "单元格[" & c.Address & "]:" & sMsg
        Next
    End Sub
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    【代码解析】
    第3~13行代码循环遍历单元格。
    第4~11行代根据自定义函数返回值提供不同的内容。
    第12行代码在【立即窗口】中输入结果,如下所示。

    单元格[$A$1]:普通数字
    单元格[$B$1]:文本数字
    单元格[$A$2]:普通数字
    单元格[$B$2]:文本数字
    单元格[$A$3]:普通数字
    单元格[$B$3]:文本数字
    单元格[$A$4]:非数字
    单元格[$B$4]:非数字
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    Untiy 使用RotateAround()方法实现物体围绕某个点或者某个物体旋转
    时间复杂度和空间复杂度详解
    [持续更新]计算机经典面试题基础篇Day2
    让GPT成为您的科研加速器丨GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图
    淘宝/天猫API接口,item_get_pro - 获得淘宝商品详情高级版
    阿里二面:SpringCloud 有几种服务调用方式?
    MinGW相关错误
    学习笔记(1)
    java中针对BigDecimal 类型字段处理
    Oracle分区表介绍
  • 原文地址:https://blog.csdn.net/taller_2000/article/details/134461062