• ベストアンサー

[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

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

  • ベストアンサー
noname#140971
noname#140971
回答No.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

gaku2008
質問者

お礼

回答ありがとうございます。SingleからCurrencyにして結果にNumberFormatLocal = "0.0"にすれば円表示から数字表示になり、うまくいきました。本当にありがとうございました。

その他の回答 (2)

noname#64531
noname#64531
回答No.2

A1セルの結果をごらんになりましたか? 0.3000000....15 これでは、1足せばループをパスします。 #1さんが同じのを書いてくださったので以下割愛

gaku2008
質問者

お礼

回答ありがとうございます。

gaku2008
質問者

補足

0.3000000....15となっていました。 これが0.3と言う形であれば少数でもうまくループが働くのでしょうか? 1を足すとありますが、どこに足すのでしょうか?よろしくお願いします。

  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.1

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 浮動小数点の誤差かと思われますので、ループ変数は整数でやってみてください。

gaku2008
質問者

お礼

回答ありがとうございます。

gaku2008
質問者

補足

浮動小数点の誤差だったんですね。でも整数じゃなくて少数でやる方法は全くないのでしょうか?

関連するQ&A