• ベストアンサー

簡単なエクセル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までしかでません。 どうすれば上手くループするようになるでしょうか? お願いします。

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

  • ベストアンサー
  • mahny
  • ベストアンサー率74% (57/77)
回答No.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 (省略)

wdkzys
質問者

お礼

わかりやすくありがとうございました。

その他の回答 (3)

回答No.3

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

wdkzys
質問者

お礼

ありがとうございました。

noname#33218
noname#33218
回答No.2

Do While i < 9 の前に念のため i=0 Do While j < 9 の前には j=0(これを入れないとj=9のままです) を入れるとよいと思います。

wdkzys
質問者

お礼

よく考えたらjが9のままでしたね。 ありがとうございました。

回答No.1

' 自信なし。動作するとは思うが、もっと簡潔なソースはありそう 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

wdkzys
質問者

お礼

ありがとうございました。