我一直在尝试找到解决问题的解决方案,但不幸的是找不到任何地方。
问题是,在执行循环时,我想检查一个范围是否包含一个非单个(找不到更好的单词(数字内容。
我的意思是非单个数字?我想区分包含诸如" 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"。当然可以重构。