2013-06-24 16 views
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 
+0

您的帖子中沒有問題。你的問題到底是什麼? –

+0

如果你想遍歷範圍「A2:A10」,選擇「A2」沒有爲你做任何事情。範圍(「2:2」)表示您正在遍歷第2行中的每個單元格。您不想這樣做。 –

+0

對於第一部分,您可以嘗試'Datecount = range(「2:2」)。SpecialCells(xlCellTypeConstants,xlnumbers).Count'。如果該範圍內不存在任何數字,則上述內容將返回錯誤,因此需要將其捕獲。對於第二部分,爲了避免循環,我們需要確定第一個非數字單元(稱之爲「aCell」)並返回「aCell.column-1」(或「0」)。一個想法是檢查除xlNumbers之外的所有「SpecialCells」的第一個單元格,並返回這些第一個單元格中的最小列。雖然不是很優雅.. – Ioannis

回答

3

解決您的第一個問題,你不需要完全循環。一個簡單的公式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 

test2的()如果在你檢查的範圍內沒有任何TEXT(表示它們都是數字單元格),將返回0。讓我知道如果這是一個問題,我會破解我的方式...

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函數的參數。

0

試試這個:

Sub flexRange() 

「範圍可estended 範圍( 「B」)選擇 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 
相關問題