2016-09-23 9 views
0

この構文に問題がありますか?文字列を比較しているときに型の不一致エラーが発生しました。

If xlwsIAR.Cells(x, 5).Text <> "FTD-OPEN" Or "FTD-CLOSE" Then 
    ''action 
    ''action 
    ''action 
End if 

セルが特定の基準を満たしているかどうかを確認しようとしているためです。

+0

比較の第2部分( "FTD-OPEN"または "FTD-CLOSE")はTRUEを返し、IFstatementは文字列値と比較されます。 ORは論理比較演算子であり、不等式内の代替比較を定義する方法ではありません。完全な不等式を(ORのどちらかの側に)2回含める必要があります。 –

答えて

3

VB/VBAは比較条件に固有です。配列の配列と比較することは可能ですが、構文はおそらくレンガごとに優れています。

If UCase(xlwsIAR.Cells(x, 5).Text) <> "FTD-OPEN" And UCase(xlwsIAR.Cells(x, 5).Text) <> "FTD-CLOSE" Then 

あなたの文字列定数は大文字だったとVBAの文字列比較は、デフォルトのケースで敏感なので、私はUCase functionsのカップルで投げました。

+0

ところで、あなたのデータは、[Range.Textプロパティ](https://msdn.microsoft.com/en-us/library/office/ff840217.aspx)と比較する必要がある非常に特殊な状況があります。 [Range.Value](https://msdn.microsoft.com/en-us/library/office/ff195193.aspx)や[Range.Value2](https://msdn.microsoft.com/en-us)ではなく、 /library/office/ff193553.aspx)。後者の方が文字列検索の方が効率的です。 .Value2は2つの方が優れています。 – Jeeped

+0

私はこの答えを改善し、DRYの原則に固執し、 'UCase(xlwsIAR.Cells(x、5).Text)'を変数に代入し、変数を 'if'ステートメントで使用することを提案します。 brute copy and pasteでプログラムを作ってはいけません:)そして、このピースはより効率的でメンテナンスできるだけでなく、読みやすくなります。 :) –

+2

'x <> yまたはx <> z'(' y <> z'は 'True')の形式の論理式は、(本当に混乱しない限り)常に' True'を返します。 x <> y'は 'False'(すなわち' x = y')で、 'x <> z'は' True'でなければなりません。 – YowE3K

関連する問題