- ベストアンサー
簡単なエクセルVBA
最近エクセルのVBAを勉強し始めたのですが、 1×1=1 1×2=2 1×3=3 ・ ・ 9×9=81 と出るようにしたいのですが、 Sub kuku() Do While i < 9 i = i + 1 Do While j < 9 j = j + 1 a = i * j Debug.Print i; "×"; j; "="; a Loop Loop End Sub としたところ1×9=9までしかでません。 どうすれば上手くループするようになるでしょうか? お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
2重ループになっているのでその点心配ありません。 内側のループにあるjの値がループを抜けた後、 再初期化されていません。 つまり、内側のループで1の段の出力が終わり、 外側のループでi=2になった時、j=9のままなので 「While j < 9」に弾かれ内側のループの処理は実行されません。 これが九九が1の段で終わってしまってしまう原因です。 なので、内側のループが終わった時にj=0にしてみれば良いでしょう。 ▼補足 変数を使うときは初期化する事をオススメします。 Sub kuku() Dim i, j As Integer i = 0 j = 0 Do While i < 9 (省略)
その他の回答 (3)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
2重のループにしてあげたらよいと思います。 Dim i As Integer Dim j As Integer For i = 1 To 9 Debug.Print "-- " & i & "の段 --" For j = 1 To 9 Debug.Print i & " × " & j & "=" & i * j Next j Next i
お礼
ありがとうございました。
Do While i < 9 の前に念のため i=0 Do While j < 9 の前には j=0(これを入れないとj=9のままです) を入れるとよいと思います。
お礼
よく考えたらjが9のままでしたね。 ありがとうございました。
- himajin100000
- ベストアンサー率54% (1660/3060)
' 自信なし。動作するとは思うが、もっと簡潔なソースはありそう Sub kuku() Dim a As Integer Dim i As Integer Dim j As Integer a = 0 i = 0 j = 0 Do While i < 9 i = i + 1 Do If j < 9 Then j = j + 1 a = i * j Debug.Print i; "×"; j; "="; a Else j = 0 ' 初期化しないとi=2以降Do Loopに入らない Exit Do End If Loop Loop End Sub
お礼
ありがとうございました。
お礼
わかりやすくありがとうございました。