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

时间:2018-02-13 19:24:36

标签: excel-vba vba excel

我一直在努力为我的问题找到解决方案,但遗憾的是无法在任何地方找到它。

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

非单数字是什么意思?我想区分包含' 23',' 111'' 51'等数字的单元格。或" = 11 + 12"," = 10 + 20"来自参考其他细胞的公式形式的数字,例如" = A1 + B1"或= SUM(A1:B1)。

我已经尝试过IsNumeric函数,但它显示以上所有都是数字和HasFormula属性但是这一组" = 11 + 12"与...一起" = A1 + B1"

编辑: 说清楚。我的目标是将所有手动输入的数据更改为" 0",所以如果有人输入简单的" 200"或者通过几个步骤逐个添加值,例如" = 200 + 100 + 400"我想将它全部更改为0.但是当有一个公式引用其他单元格时,我想不管它。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分:0)

这是一种廉价的完全没有重构的方式,从this post借用函数:

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,查看单元格中的公式,从中删除非字母数字值,然后测试“isnumeric”。当然可以重构。