-PR-
noname#208339

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」までループしますし・・・
    お礼コメント
    noname#208339

    VBのバグだったんですね。
    原理までつきとめていただいてありがとうごさいます。
    Currency型って使わない方がいいみたいですね。
    ありがとうございました。
    投稿日時 - 2006-12-20 22:27:38
    • ありがとう数0
    -PR-
    -PR-

    その他の回答 (全3件)

    • 2006-12-19 09:08:31
    • 回答No.1
    変数 i の型はなんでしょうか ...続きを読む
    変数 i の型はなんでしょうか
    お礼コメント
    noname#208339

    iは宣言してませんでした。
    どうやらVBのバグみたいです。
    ありがとうございました。
    投稿日時 - 2006-12-20 22:10:58
    • ありがとう数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 にしても実行されませんか?
    お礼コメント
    noname#208339

    iをLongにしたらうまくいきました。
    どうやらVBのバグみたいです。
    ありがとうございました。
    投稿日時 - 2006-12-20 22:13:36
    • ありがとう数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 は使えないようです。
    多分、想定外ではないのでしょうか?
    お礼コメント
    noname#208339

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

    そうみたいですね。
    VBで財務ソフト作っていたら大変なことになってしまうとこでした。
    ありがとうございました。
    投稿日時 - 2006-12-20 22:17:39
    • ありがとう数0
    • 回答数4
    • 気になる数0
    • ありがとう数0
    • ありがとう
    • なるほど、役に立ったなど
      感じた思いを「ありがとう」で
      伝えてください
    • 質問する
    • 知りたいこと、悩んでいることを
      投稿してみましょう
    こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
    このQ&Aにはまだコメントがありません。
    あなたの思ったこと、知っていることをここにコメントしてみましょう。

    関連するQ&A

    -PR-
    -PR-

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

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

    特集


    成功のポイントとは?M&Aで経営の不安を解決!

    -PR-

    ピックアップ

    -PR-
    ページ先頭へ