循环遍历单元格区域以检查它是否为数字(任意数字)

时间:2013-06-24 19:54:44

标签: excel-vba vba excel

我正在寻找一种循环一系列单元格并检查单元格是否为数字的方法。我知道日期实际上是数字,我将搜索日期的数量。因此,假设我想检查范围(“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

3 个答案:

答案 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