Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如果单元格内容为非单个数字_Excel_Vba - Fatal编程技术网

Excel 如果单元格内容为非单个数字

Excel 如果单元格内容为非单个数字,excel,vba,Excel,Vba,我一直在试图找到解决我问题的办法,但不幸的是,在任何地方都找不到 问题是,在执行循环时,我想检查一个范围是否包含一个非单个的数字内容,但找不到更好的词来表示它 我说的非单数值是什么意思?我想将包含诸如'23'、'111'、'51'或=11+12、=10+20等数字的单元格与引用其他单元格的公式形式的数字区分开来,如=A1+B1或=SUMA1:B1 我已经尝试过IsNumeric函数,但它显示上面所有的函数都是数值的,HasFormula属性,但这个函数将=11+12和=A1+B1组合在一起 编辑

我一直在试图找到解决我问题的办法,但不幸的是,在任何地方都找不到

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

我说的非单数值是什么意思?我想将包含诸如'23'、'111'、'51'或=11+12、=10+20等数字的单元格与引用其他单元格的公式形式的数字区分开来,如=A1+B1或=SUMA1:B1

我已经尝试过IsNumeric函数,但它显示上面所有的函数都是数值的,HasFormula属性,但这个函数将=11+12和=A1+B1组合在一起

编辑: 说清楚。我的目标是将所有手动输入的数据更改为0,因此,如果有人仅输入200或在几个步骤中逐个添加值,如=200+100+400,我希望将所有数据更改为0。然而,当有一个公式涉及到其他细胞时,我想不去管它


提前感谢您的帮助

这是一种完全不重构的廉价方法,借用了以下功能:

基本上就是循环A1:A100,查看单元格中的公式,从中去掉非字母数字值,然后测试isnumeric。当然可以进行重构。

尝试以下方法:

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

不知道你的意思。您的意思是A1+B1的值是数字还是实际字符串A1+B1,因为这不是数字。如果单元格包含=A1+100怎么办?保持原样或设置为0?那么您想查找没有先例的数值单元格吗?@AlexP预期不会出现这种情况这是错误恢复下一步的少数用法之一,完全可以。当用作工作表函数时,函数hasPrecements的行为异常。我在处理这个问题时遇到了这个问题:@JohnColeman-我看到你在这个问题上发布了一个问题,关于VBA和工作表在使用UDF时的奇怪行为。我不知道为什么会这样。看起来很奇怪。。。
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