我一直在努力为我的问题找到解决方案,但遗憾的是无法在任何地方找到它。
问题在于,在执行循环时,我想检查范围是否包含非单一(无法找到更好的单词)数字内容。
非单数字是什么意思?我想区分包含' 23',' 111'' 51'等数字的单元格。或" = 11 + 12"," = 10 + 20"来自参考其他细胞的公式形式的数字,例如" = A1 + B1"或= SUM(A1:B1)。
我已经尝试过IsNumeric函数,但它显示以上所有都是数字和HasFormula属性但是这一组" = 11 + 12"与...一起" = A1 + B1"
编辑: 说清楚。我的目标是将所有手动输入的数据更改为" 0",所以如果有人输入简单的" 200"或者通过几个步骤逐个添加值,例如" = 200 + 100 + 400"我想将它全部更改为0.但是当有一个公式引用其他单元格时,我想不管它。
提前感谢您的帮助!
答案 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”。当然可以重构。