- ベストアンサー
[VBA] for文の3次元ループ
for文の3次元ループがうまく働いてくれません。 8通り(2x2x2)の組み合わせ表示を期待しましたが2通り(y1のみ)のみでループが終わってしまいます。エラーなどはでません。何が原因なのか分かりません。ご指導お願いします。 Public x1 As Single, y1 As Single, z1 As Single Sub Start1() i=1 For x1 = 0.3 To 0.4 Step 0.1 For y1 = 0.5 To 0.6 Step 0.1 For z1 = 0.4 To 0.5 Step 0.1 Cells(i, 1) = x1 Cells(i, 2) = y1 Cells(i, 3) = z1 i=i+1 Next z1 Next y1 Next x1 End Sub
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
0.3___0.5___0.4 _____________0.5 _______0.6___0.4 _____________0.5 0.4___0.5___0.4 ______________0.5 _______0.6___0.4 ______________0.5 多少、表示は変えています。 Private Sub CommandButton1_Click() Dim i As Integer Dim x1 As Currency Dim y1 As Currency Dim z1 As Currency i = 1 For x1 = 0.3 To 0.4 Step 0.1 Cells(i, 1) = x1 For y1 = 0.5 To 0.6 Step 0.1 Cells(i, 2) = y1 For z1 = 0.4 To 0.5 Step 0.1 Cells(i, 3) = z1 i = i + 1 Next z1 Next y1 Next x1 End Sub
その他の回答 (2)
A1セルの結果をごらんになりましたか? 0.3000000....15 これでは、1足せばループをパスします。 #1さんが同じのを書いてくださったので以下割愛
お礼
回答ありがとうございます。
補足
0.3000000....15となっていました。 これが0.3と言う形であれば少数でもうまくループが働くのでしょうか? 1を足すとありますが、どこに足すのでしょうか?よろしくお願いします。
- okg00
- ベストアンサー率39% (1322/3338)
Public x1 As Single, y1 As Single, z1 As Single Sub Start1() i = 1 For x1 = 3 To 4 Step 1 For y1 = 5 To 6 Step 1 For z1 = 4 To 5 Step 1 Cells(i, 1) = x1 / 10 Cells(i, 2) = y1 / 10 Cells(i, 3) = z1 / 10 i = i + 1 Next z1 Next y1 Next x1 End Sub 浮動小数点の誤差かと思われますので、ループ変数は整数でやってみてください。
お礼
回答ありがとうございます。
補足
浮動小数点の誤差だったんですね。でも整数じゃなくて少数でやる方法は全くないのでしょうか?
お礼
回答ありがとうございます。SingleからCurrencyにして結果にNumberFormatLocal = "0.0"にすれば円表示から数字表示になり、うまくいきました。本当にありがとうございました。