dポイントプレゼントキャンペーン実施中!

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

A 回答 (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

(省略)
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/10/24 22:14

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/10/24 22:13

Do While i < 9


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

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

お礼日時:2006/10/24 22:13

' 自信なし。

動作するとは思うが、もっと簡潔なソースはありそう


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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/10/24 22:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!