2017-07-21 4 views
0

私は簡単な質問だろうと思ったします。MsgBox(cell.text)私は私の文字列を決定することができましたを使用して、今すぐVBA InStr関数(道を働いていない)私はそれが

For i = 0 to 8 Step 1 
    If InStr(cell.Text, Str(i)) <> 0 Then 
     'Do stuff 
    End If 
Next i 

は、「0N」であります そして、Str(i)は "0"である。私がInStr()を理解する方法は、あなたが探しているものの位置の整数を返します。あなたが探しているものが含まれていない場合は0を返します。なぜこれは機能しませんか?

+1

'Str'を取り除き、適切な型キャスト' CStr'を使用してください。 –

+0

'MsgBox Left(cell.Text)=" 0 "'の結果はどうですか? – Slai

+0

私の質問をより適切に編集していただきありがとうございます。私は現時点で少し不満だった以上@DavidZemens – LiCarroll

答えて

2

InStrの機能の理解は正しいです。 Str機能についてのあなたの仮定は、しかし、間違っている:)

Str function兆候がない場合は、文字に単一の文字を比較しているので、先頭にスペースを追加します。" 0"常にfalseとなります。

数値が文字列に変換される場合、先頭のスペースは常にNumberの符号として予約されます。 Numberが正の場合、返される文字列には先頭のスペースが含まれ、プラス記号が暗黙指定されます。

使用Cstr(i)はこれを回避するために、

If InStr(cell.Text, CStr(i)) <> 0 Then 

や巣Trim内のあなたのStr機能:

If InStr(cell.Text, Trim(Str(i))) <> 0 Then 

注VBAでもその0 = "0"、あなたが技術的に必要はありませんを文字列に明示的にキャストしますが、これはおそらく良い習慣です。

If Instr(cell.Text, i) <> 0 Then ' <-- this should also work 
+0

ありがとう、このソリューションは動作します! – LiCarroll

関連する問題