-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
-PR-
-PR-

その他の回答 (全3件)

  • 2006-12-19 09:08:31
  • 回答No.1
変数 i の型はなんでしょうか ...続きを読む
変数 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 にしても実行されませんか? ...続きを読む
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 ...続きを読む
ウーン!
この現象は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

-PR-
-PR-

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

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

特集


士業をはじめとする専門家が回答するQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ