2016-07-06 23 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=60))を使用して、入力文字列strの英数字以外の値をチェックします。 .aspx)と[LBound](https://msdn.microsoft.com/en-us/library/t9a7w1ac(v = versus90).aspx)から[UBound](https://msdn.microsoft。 com/ja-jp/library/office/gg278658.aspx)。 – Jeeped

+0

あなたの質問は何ですか? – arcadeprecinct

+1

あなたの説明はあいまいです - あなたの関数は*配列*(あなたが実際に入力を記述しているもの)または*文字列*(あなたの入力例です)を受け入れるはずですか?また、 - 入力 '9005110-4400'の戻り値は何ですか? True - それは2つの数字、すなわち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

文字列の配列をとり、数字以外の値をチェックする関数が必要だとします。あなたの質問は、あなたの関数が常にFalseを返す理由です。

Booleanのデフォルト値はfalseであるため、機能の冒頭にContainsAllNumbers = Trueを設定する必要があります。

Option Explicitもお勧めしますので、変数をDimに忘れないようにしてください。

0

文字をアスキーコードに変換し、それぞれを確認してください(おそらく)。特定の文字の特定の値を調べるには、asciiテーブルを検索できます。

例として、私はこれを私のマクロからコピーしました。

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 
関連する問題