総ありがとう数 累計4,284万(2014年10月25日現在)

毎月4,000万人が利用!Q&Aでみんなで助け合い!

-PR-
yamamoto99

Currency (通貨型)に関して教えてください。(VB5です)

Private Sub Command1_Click()
Dim a As Currency
a = 222222
For i = 1 To a
Next i
End Sub
上のコードではFor文が一度も実行されずに終わってしまいます。

Private Sub Command1_Click()
Dim a As Currency
a = 22222
For i = 1 To a
Next i
End Sub
これだとちゃんとiが22222まで実行されます。
一体どうしてでしょうか。

よろしくお願いします。
  • 回答数4
  • 気になる数0

Aみんなの回答(全4件)

質問者が選んだベストアンサー

  • 2006-12-19 11:47:59
  • 回答No.4
下記の様なプログラムを試してみました。
------------------------------
Private Sub Command1_Click()
Dim a As Currency
Dim i As Variant, j As Long

For j = 1 To 222222
a = j
For i = 1 To a Step 1
Next i
If i = 1 Then
Debug.Print j, i
Stop
End If
Next j

End Sub
------------------------------
214749で、ループが回らなくなりますね。
で、「214749」とは・・・
Currency型って、整数値を1万分の1にして小数値ぽく見せるデータ型ですよね。
つまり、「214749」は内部的には「2147490000」と言う整数値で格納されているんだと思います。
で、「2147490000」って・・・
Long型の最大値である、「2147483647」をちょうど越えた値です。
#つまり、符号ビットが切り替わる箇所。

No1さんが言われているように符号処理を間違えてしまっているっぽいですね。

実際
---------------------------------------------
Private Sub Command1_Click()
Dim a As Currency
a = 222222
For i = 1 To a Step -1
Next i
End Sub
-------------------------------------------
とすると、「-1」までループしますし・・・
お礼コメント
VBのバグだったんですね。
原理までつきとめていただいてありがとうごさいます。
Currency型って使わない方がいいみたいですね。
ありがとうございました。
投稿日時 - 2006-12-20 22:27:38
  • 同意数0(0-0)
  • ありがとう数0

その他の回答 (全3件)

  • 2006-12-19 09:08:31
  • 回答No.1
変数 i の型はなんでしょうか
お礼コメント
iは宣言してませんでした。
どうやらVBのバグみたいです。
ありがとうございました。
投稿日時 - 2006-12-20 22:10:58
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 2006-12-19 09:17:38
  • 回答No.2
VB5は忘れてしまっているかも知れませんが、たしかint型は16bit?
a=222222 では、オーバーフローして内部では マイナスの数値になっているのかも知れません。
i を Long int にしても実行されませんか?
お礼コメント
iをLongにしたらうまくいきました。
どうやらVBのバグみたいです。
ありがとうございました。
投稿日時 - 2006-12-20 22:13:36
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 2006-12-19 09:27:20
  • 回答No.3
noname#22222

ウーン!
この現象はVB6.0でも確認されますね。

Private Sub Command1_Click()
Dim a As Currency
Dim i As Variant

a = 222222
For i = 1 To a
Next i
Debug.Print i
End Sub

[イミディエイト]
1

Private Sub Command1_Click()
Dim a As Currency
Dim i As Currency

a = 222222
For i = 1 To a
Next i
Debug.Print i
End Sub
[イミディエイト]
1

Private Sub Command1_Click()
Dim a As Currency
Dim i As Long

a = 222222
For i = 1 To a
Next i
Debug.Print i
End Sub

[イミディエイト]
222223

つまり、For 文では Currency は使えないようです。
多分、想定外ではないのでしょうか?
お礼コメント
>つまり、For 文では Currency は使えないようです。
>多分、想定外ではないのでしょうか?

そうみたいですね。
VBで財務ソフト作っていたら大変なことになってしまうとこでした。
ありがとうございました。
投稿日時 - 2006-12-20 22:17:39
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 回答数4
  • 気になる数0
  • ありがとう数0
  • ありがとう
  • なるほど、役に立ったなど
    感じた思いを「ありがとう」で
    伝えてください

関連するQ&A

その他の関連するQ&Aをキーワードで探す

別のキーワードで再検索する

あなたの悩みをみんなに解決してもらいましょう

  • 質問する
  • 知りたいこと、悩んでいることを
    投稿してみましょう
-PR-
-PR-
-PR-

特集

専門医・味村先生からのアドバイスは必見です!

関連するQ&A

-PR-

ピックアップ

  • easy daisy部屋探し・家選びのヒントがいっぱい!

-PR-
ページ先頭へ