みんなの【マイ・ベスト積読2024】を教えてください。

EXCEL VBA の For・・・Next 小数のときに動きがおかしい。

<例>
 Sub テスト()
  Dim i As Single
  Dim j As Long

  For i = 0.025 To 0.03 Step 0.0025
  j = j + 1
  Cells(1, j) = i
  Next i
 End Sub

上記コードを実行すると、セル(1,1)~(1,3) にそれぞれ 0.025、0.0275、0.03 が入るはずです。
しかし、0.03が入らないまま処理が終了します。
デバックすると、
Next i
で、iに0.03が設定されたら、
   j = j + 1
に戻らず、そのまま終わっています。

シートに表示された0.025、0.0275を数式バーで見るとそれぞれ
    0.025000000372529、0.0274999998509884
となっています。
同様にNext i で0.03が設定されたように見えて、実際は0.03よりも少しだけ大きな数値が入ったのでしょうか?(debug.printを使いイミディエイトウインドウに表示させても0.03でしたが)

期待どおりi=0.03でも処理を実行させるにはどうしたらいいのでしょうか?

よろしくお願いします。

A 回答 (1件)

そりゃそうです。

Excelは2進演算しますから。その手のループには整数を使うのが「プログラマの常識」です。

ですので基本的には

 Sub テスト()
  Dim i As Single
  Dim j As Long

  For i = 250 To 200 Step 25
  j = j + 1
  Cells(1, j) = i / 10000
  Next i
 End Sub

こんな感じではないかと。

いずれにせよ「パラメータに小数を使う」のは避けないと、思わぬところでおかしなな動きをしますよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。

初期値、最終値、加算値は「%」で入力する処理を作りたかったので、小数を使っていました。

教えていただいたコードをヒントに、パラメータも*10000して上手く処理できました。

助かりました。

お礼日時:2010/09/22 15:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報