

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でも処理を実行させるにはどうしたらいいのでしょうか?
よろしくお願いします。
No.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
こんな感じではないかと。
いずれにせよ「パラメータに小数を使う」のは避けないと、思わぬところでおかしなな動きをしますよ。
ありがとうございます。
初期値、最終値、加算値は「%」で入力する処理を作りたかったので、小数を使っていました。
教えていただいたコードをヒントに、パラメータも*10000して上手く処理できました。
助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
UMLでの例外処理
-
【Excel】特定の文字を含むセル...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
セックスレスの既婚女性は自慰...
-
switch の範囲指定
-
月度は何て読みますか?
-
ボタンクリックイベント 重複...
-
EXCEL VBA マクロ 実行する度に...
-
EXCEL VBA の For・・・Next ...
-
TextBoxに日付を自動的に入れる
-
リョウ・・・量?料?
-
フローチャートの結合子
-
Googleマップのストリートビュ...
-
マクロで、質問です。 Find関数...
-
C#です。リストボックスの項目...
-
2重のDo~Loopは?
-
Loadイベント中にほかのイベン...
-
生活保護受給者は性欲をどんな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
switch の範囲指定
-
EXCEL VBA マクロ 実行する度に...
-
UMLでの例外処理
-
DoEventsがやはり分からない
-
月度は何て読みますか?
-
お家デートをしててハグを長い...
-
VB.NET Excelを読み込んでDataT...
-
VBの質問#if 0 then ってどう...
-
Do~Loopした回数をカウントしたい
-
VBAでCOPYを繰り返すと、処理が...
-
メルカリのメルカードで買い物...
-
インタラクティブの反対語は?
-
Loadイベント中にほかのイベン...
-
リョウ・・・量?料?
-
vba 空のデータをSplitする時の...
-
findは動くがfindnextがマクロ...
おすすめ情報