如果单元格内容是非单个数字



我一直在尝试找到解决问题的解决方案,但不幸的是找不到任何地方。

问题是,在执行循环时,我想检查一个范围是否包含一个非单个(找不到更好的单词(数字内容。

我的意思是非单个数字?我想区分包含诸如" 23','111','51'或" = 11 12"," = 10 20"等数字的单元格与具有参考其他单元格的公式形式的数字,像" = a1 b1"或= sum(a1:b1(。

我已经尝试了数字函数,但它表明上述所有内容都是数字和Hasformula属性,但是该组与例如。" = a1 b1"

编辑:要清楚。我的目标是将所有手动输入的数据更改为" 0",因此,如果某人简单地输入" 200",或者以几个步骤添加值,例如" = 200 100 100 400",我想更改所有内容它到0。但是,当有一个公式指的是其他单元时,我想独自留下。

预先感谢您的帮助!

尝试以下:

Sub test()
    Dim cl As Range, test As Boolean
    For Each cl In Range("A1:A5") '~~> Update as required
        If Not HasPrecedents(cl) Then
            If IsNumeric(cl) And Len(cl) > 1 Then
                cl = "0"
            End If
        End If
    Next cl
End Sub
Public Function HasPrecedents(cl As Range) As Boolean
    On Error Resume Next
    HasPrecedents = IIf(cl.Precedents.Count > 0, True, False)
End Function

这是一种便宜的完全不重构的方式,从这篇文章中借用该功能:

Sub test()
    Dim c As Range
    For Each c In Range("A1:A100")
        If IsNumeric(AlphaNumericOnly(c.Formula)) Then Debug.Print c.Address & " is numeric"
    Next
End Sub
Function AlphaNumericOnly(strSource As String) As String
    Dim i As Integer
    Dim strResult As String
    For i = 1 To Len(strSource)
        Select Case Asc(Mid(strSource, i, 1))
            Case 48 To 57, 65 To 90, 97 To 122: 'include 32 if you want to include space
                strResult = strResult & Mid(strSource, i, 1)
        End Select
    Next
    AlphaNumericOnly = strResult
End Function

基本上,这是通过A1:A100循环的,查看了单元格中的公式,从其中剥离了非alphanumeric的值,然后测试" isnumeric"。当然可以重构。

最新更新