-PR-

解決済みの質問

質問No.2611683
暇なときにでも
暇なときにでも
お気に入り投稿に追加する (0人が追加しました)
回答数4
閲覧数1396
Currency (通貨型)に関して教えてください
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まで実行されます。
一体どうしてでしょうか。

よろしくお願いします。
投稿日時 - 2006-12-19 06:37:20

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

回答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」までループしますし・・・
投稿日時 - 2006-12-19 11:47:59
この回答を支持する
(現在0人が支持しています)
お礼
VBのバグだったんですね。
原理までつきとめていただいてありがとうごさいます。
Currency型って使わない方がいいみたいですね。
ありがとうございました。
投稿日時 - 2006-12-20 22:27:38

ベストアンサー以外の回答 (3)

回答No.3
ウーン!
この現象は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 は使えないようです。
多分、想定外ではないのでしょうか?
投稿日時 - 2006-12-19 09:27:20
この回答を支持する
(現在0人が支持しています)
お礼
>つまり、For 文では Currency は使えないようです。
>多分、想定外ではないのでしょうか?

そうみたいですね。
VBで財務ソフト作っていたら大変なことになってしまうとこでした。
ありがとうございました。
投稿日時 - 2006-12-20 22:17:39
回答No.2
VB5は忘れてしまっているかも知れませんが、たしかint型は16bit?
a=222222 では、オーバーフローして内部では マイナスの数値になっているのかも知れません。
i を Long int にしても実行されませんか?
投稿日時 - 2006-12-19 09:17:38
この回答を支持する
(現在0人が支持しています)
お礼
iをLongにしたらうまくいきました。
どうやらVBのバグみたいです。
ありがとうございました。
投稿日時 - 2006-12-20 22:13:36
回答No.1
変数 i の型はなんでしょうか
投稿日時 - 2006-12-19 09:08:31
この回答を支持する
(現在0人が支持しています)
お礼
iは宣言してませんでした。
どうやらVBのバグみたいです。
ありがとうございました。
投稿日時 - 2006-12-20 22:10:58
この質問は役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
もっと聞いてみる

関連するQ&A

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

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

回答募集中

  • answer

    作成日の挿入Access2010を使用しています。 エクスポートするExcelファイルに画像のような作成...

  • answer

    削除が実行されない以下のvbsを実行しても rmdir が実行されません どうしたらよいでしょうか Dim o...

  • answer

    VB.NETからのExcel出力について現在、Windowsアプリの移行作業を行っています。  旧環境は以下の通りです。   ・Wi...

同じカテゴリの人気Q&Aランキング

カテゴリ
Visual Basic
-PR-
-PR-

特集

背筋がゾクゾクする心霊体験を要チェック!

お城、ボート、ツリーハウス、ユニークな物件満載!

【期間限定】1ヶ月無料キャンペーン中!

このQ&Aの関連キーワード

同じカテゴリの人気Q&Aランキング

カテゴリ
Visual Basic
-PR-

回答のついた最新のQ&A

カテゴリ
Visual Basic

rss

miya2004

Q_iconビープ音鳴らし続けたい。2014-07-27 07:35:57

todo36

A_iconSystem.Console.Beep http://...2014-07-29 16:11:44

satoron666

ピックアップ

-PR-