2

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

3 回答 3

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。让我知道这是否是一个问题,我会解决它......

于 2013-06-25T01:53:01.093 回答
0

尝试这个:

Sub flexRange()

'范围可以扩展 Range("b2").Select 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
于 2013-06-24T21:03:38.393 回答
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函数的参数。

于 2013-06-24T20:11:29.133 回答