2016-11-19 42 views
0

VBAプログラムを構築する際に奇妙な問題に遭遇しています。プログラムは、CSVファイルを取り込み、それを取り戻す前に何らかの再フォーマットを行います。私はプログラムで2桁の数字が3桁の数字よりも大きいと考えている問題に取り組んでいます。例えば、それは60が、120よりも大きいと思いますが、60が80未満であることを認識し、そして100という未満以下は120である私のコードスニペット:2桁の数字がVBAの3桁の数字より大きい問題

私のファイルは、AAのCSVは、次のように設定されている
if Rate < Miles and (Miles > 60 and Miles <=80) then 
    Rate = 80 
elseif Rate < Miles and (Miles > 80 and Miles <=120) then 
    Rate = 120 
End if 

90210,90201,60,61 
90201,90210,60,100 

CSVファイルでは、各行の最後の2つの数字が私が注目しているものです。 60年代はレートで、61と100はマイルです。このプログラムを実行すると、最初の行に進み、Rateを60から80に変更します。これは正しいです。問題は、60行目を60にして120に変更するのではなく、2行目を実行するときです。

このセクションでブレークポイントを設定し、変数が正しく読み込まれています。マイルは100に等しくなりますが、Rate = 120部分をスキップします。テストとして、私はRate < MilesRate > Milesに変更しました.の行は、60が100未満であると考えられていたので、十分に変更されました。もちろん、3桁のレートを実行するときにこの変更を行うと他の問題が発生します。誰でもアイデアはありますか?

答えて

7

数値は文字列ではなく数値として比較されます。

"100" < "120" < "60" < "80" 

どのように変数を宣言して割り当てましたか?

宣言していない場合は、バリアントであり、文字列または数値のいずれかです。 DimとしてLongとなります。

各モジュールの先頭にOption Explicitと記載してください。 コンパイル時に、宣言されていない変数または定数のスペルミスを報告します。 これを新しいモジュールに自動的に含めるには、VBAエディタでRequire Variable Declarationオプションを設定します。 これは実際にVBA開発に必要なものです。