配列の指定位置に桁の値があると予想される場合は、かさばるエラーハンドラを作成するか、GoToを使用する必要はありません。Type
の変数をチェックできます。 ので、例:あなたが見たよう
For i = 1 To r
If IsNumeric(dataArray(i,1)) And Not IsString(dataArray(i,1)) Then
If dataArray(i,1) <10 Then
intA = intA + 1
End If
If dataArray(i,2) <10 Then intB = intB + 1
If dataArray(i,2) <10 Then _
intC = intC + 1: intD = intD + 1
End If
Next i
Public Function IsString(ByRef var as Variant) as Boolean
IsString = (TypeName(var) = "String")
End Function
、あなたがして明示的にNot IsString
をチェックし、文字列が数値であることができるので、IsNumeric
をチェックすることができます。
文字列はIsNumeric
関数(例:chars)からTrueを返すだけでなく、例を変更して独自の関数を拡張する方法があるためです。
リンク: TypeName、 IsNumeric
さらなる例(一方小数点および可能文字列と数字のみ)。 入力がどのように見えるのであれば何です:
例:
Sub AcceptOnlyNumbers()
'pass only strings that can be threaten as doubles
Dim rng As Range
Dim cl As Range
Set rng = Sheets(1).[A1:A8]
For Each cl In rng
With cl
If Not (IsNumeric(.Value2) Or (IsNumeric(Val(.Value2)) And _
Len(.Value2) = Len(CStr(Val(.Value2))))) And .Value2 <> vbNullString Then
Debug.Print .Value2, "is filtered"
Else
Debug.Print .Value2, "is passed"
End If
End With
Next
End Sub
出力:
と小数点がカンマであれば、その後、我々はCDbl
で文字列を変換することができますが小数点の場合はVal
となります。気軽に遊んでみてください!
Public Function IsWholeNumber(ByVal expDbl As Double) as Boolean
IsWholeNumber = (Int(expDbl) = expDbl)
'or more bulky but ok too: IsWholeNumber = InStr(Str(expDbl), ".") = 0
End Function
: - あなたは小数を必要としない場合たとえば、あなたがこの後に別のチェックを追加することができます(もう一度、あなた自身の構築、またはすべてこの例のみを、あなたはスタートで全体の数字を確認することができます)この事実に注意してください。小数点以下の国では、CDbl
はドットでうまく動作し、私の例は異なって動作します(コンマで値もフィルタリングされます)。
リンク: Val、 Writing International Code
あなたが達成しようとしているものをよりよく説明することができますか?どこでエラーが発生していますか( 'On Error Resume Next'を使わずに)。時々あなたのエラーをトラップして処理するほうが良い) –
追加のテスト 'If Err.Number = 0'をいつでも追加することができます。適切な場合は' Err.Clear'のようなステートメントを使うこともできます。しかし、「On Error Resume Next」メカニズムは大量に計算すべきではありません。それは例外的な便利な「トリック」ですが、実際にコード内で数えたい場合は、この決定を本当に再考する必要があります。 –
例えば、上記のコードでは、変数が数値であることが保証されていない場合、*良い*コードはエラーハンドリング時にカウントするのではなく、IsNumericで最初にテストする必要があります。指令。 –