既出の質問でしたら失礼いたします。Variant変数について質問です。
エクセルVBAを使ってMAX.値を保持する単純なソースを組んだのですが、負の値のMAX.値の判定に失敗してしまいました。
Dim A As Variant, B As Variant
if A<B then A=B
AとBには、一定のルールで作成された他のテキストファイルからInputとMid関数で該当の数値部分を取得しています。たまに数値でない文字列が入ることもあるため、Variantとして宣言しています。例えば、
A="-7.02"
B="-6.4"
という状態のとき、
if A<B then A=B
では A<B がFalse となり、 A="-7.02" のままです。
2行目を
A = Application.WorksheetFunction.Max(A, B)
とすると A=-6.4 とこちらの望む数値が返ってきます。
<や>の比較演算子は数値に対するものだと思っていたので、VariantにしていればMax関数の時と同じようにA,Bも数値として扱われるのかと思ったのですがCDblなどで変換しない限り文字列から部分取得してきた値は自動で数値になることはないのでしょうか?
だとするとMax関数の時にはなぜエラーではなく意図通りの数値が返ってくるのでしょうか?
正しい比較結果を取得するには
A = Application.WorksheetFunction.Max(A, B)
もしくは
if CDbl(A)<CDbl(B) then A=B
だと思ったのですが、他に適切なソースがございましたらご教示いただけますと幸いです。
また、単に疑問なのですが、<や>の比較演算子を文字列に使用することがあるとしたらどのような比較をするときなのでしょうか?
多分基本的なところがわかっていない故の疑問だと思うのですが、ご教示いただけますと幸いです。
よろしくお願いいたします。
使用アプリケーション:office365のExcelです。
以下追記---------
いろいろ試してみているのですが、テキストファイルから取得してきた値が負でなく正の数であればAとBが""付き(String)のままでも A<B がtrueとなり大きい方が取得できました。
ますます謎が深まっています…。
回答4件
あなたの回答
tips
プレビュー