2016-07-06 34 views
0

我正在嘗試創建一個函數來檢查非數字字符的數組。我確信現有函數有一種方法,但我希望能夠做一個乾淨的函數。檢查數組中的非數字字符

這是我有:

Public Function ContainsAllNumbers(Text() As Variant) As Boolean 

    For Each element In Text 

     If Not IsNumeric(element) Then 

      ContainsAllNumbers = False 

     End If 

    Next 

End Function 

我希望它採取將像11013688或K03778或9005110-4400的參數。我需要知道這些字符串是否包含不是數字的東西。

+0

使用[拆分功能](https://msdn.microsoft.com/en-us/library/aa263365(v = vs.60) .aspx)並從[LBound](https://msdn.microsoft.com/en-us/library/t9a7w1ac(v = vs.90).aspx)到[UBound](https://msdn.microsoft。 COM/EN-US /圖書館/辦公室/ gg278658.aspx)。 – Jeeped

+0

你的問題是什麼? – arcadeprecinct

+1

你的描述是不明確的 - 你的函數應該接受一個* array *(這就是你實際描述的輸入)或者一個* string *(這就是你的示例輸入)。另外 - 輸入「9005110-4400」的返回值是多少?真 - 它只包含兩個數字,或Fasle - 它包含非數字字符'-'? –

回答

1

這是一個(調試)函數,它接受一個字符串輸入並返回True當且僅當字符串中的所有字符都是數字。這可能是(可能)您正在嘗試執行的操作:

Function AllDigits(s As String) As Boolean 
    Dim i As Long 
    For i = 1 To Len(s) 
     If Not IsNumeric(Mid(s, i, 1)) Then 
      AllDigits = False 
      Exit Function 
     End If 
    Next i 
    AllDigits = True 
End Function 
+0

感謝您的幫助!抱歉的混淆。我打算自己搞清楚,但我從未使用過VBA。我非常感謝你的幫助,以及其他人的幫助。 –

1

我假設你想要一個函數,它接受一串字符串並檢查它們是否爲nun-numeric值。那麼你的問題是,爲什麼你的功能總是返回False

Boolean的默認值爲false,因此您需要在函數的開頭設置ContainsAllNumbers = True

我也推薦使用Option Explicit所以你不要忘記Dim你的變量。

0

將字符轉換爲它們的ascii代碼並檢查它們中的每一個。你可以查找一個ASCII表來找出某些字符的特定值。

作爲一個例子,我剛剛從我的一個宏複製了這個。它檢查輸入字符串str中的非字母數字值:

invalidCharacter = false 
For pos = 1 To Len(str) 
Select Case Asc(Mid(str, pos, 1)) 'ascii value of character at str(pos) 
     Case 48 To 57, 65 To 90, 97 To 122 '0-9,a-z,A-Z 
      'nothing 
     Case Else 
      invalidCharacter = True 
    End Select 
Next pos 
If invalidCharacter Then 
    MsgBox "only numbers or letters may be used" 
End If