我正在寻找一种循环一系列单元格并检查单元格是否为数字的方法。我知道日期实际上是数字,我将搜索日期的数量。因此,假设我想检查范围(“A2:A10”),如果单元格是数字,则将1添加到我的datecount变量中。 ISNUMBER()函数似乎仅在您查找特定数字时才有用。但我正在寻找任何数字。
Sub Main()
Dim Datecount As Integer
Datecount = 0
Range("A2").Select
For Each c In Range("2:2")
If c.Value.IsNumber() Then
Datecount = Datecount + 1
Next
End Sub
以上是我需要帮助的最重要的事情。如果你可以帮忙,那太好了!如果你可以帮助完成下一部分,那也很棒。基本上,我想检查单元格是否是上面的数字。但这一次,如果它不是一个数字,我希望它退出循环。
Dim Datecount As Integer
Datecount = 0
Range("A2").Select
For Each c In Range("2:2")
If c.Value.IsNumber() Then
Datecount = Datecount + 1
ElseIf
Exit For
End If
Next
End Sub
答案 0 :(得分:4)
要解决您的第一个问题,您根本不需要循环。一个简单的CountIf公式将为您提供所需的内容:
Sub test()
Dim DateCount As Integer
DateCount = Application.WorksheetFunction.CountIf(Sheet1.Range("A2:A10"), ">=0")
End Sub
我 认为 这将为您的第二个问题做点什么:
Sub test2()
Dim LastNumberRow As Integer
If Application.Evaluate("=IFERROR(MATCH(TRUE,INDEX(ISTEXT($A2:$A10),0),0),0)") = 1 Then
LastNumberRow = 0
Else
LastNumberRow = Application.Evaluate("=IFERROR(MATCH(TRUE,INDEX(ISTEXT($A2:$A10),0),0),0)")
End If
End Sub
如果您正在检查的范围内没有任何TEXT,那么test2()将返回0(意味着它们都是数字单元格)。让我知道如果这是一个问题,我会破解它...
答案 1 :(得分:0)
尝试:
Sub Main()
Dim c as Range
Dim Datecount As Integer
Datecount = 0
For Each c In Range("2:2").Cells
If IsNumeric(c.Value) Then
Datecount = Datecount + 1
End If
Next
End Sub
现在,我不确定你对IsNumber()
函数的意思。我从来没有听说过这个。在任何情况下,您都不会将函数应用于对象的末尾:
c.Value.IsNumeric()
会给你一个错误(对象不支持这个属性或方法,可能,我还没有测试过它)
相反:
IsNumeric(c.Value)
,因为c.Value
是您传递给IsNumeric
函数的参数。
答案 2 :(得分:0)
试试这个:
Sub flexRange()
'范围可以扩展范围(“b2”)。选择i = 0
Do Until ActiveCell = ""
If IsNumeric(ActiveCell.Value) Then i = i + 1
ActiveCell.Offset(1, 0).Select
Loop
MsgBox "I found_" & i & "_Numeric element"
End Sub