|
(1)
> 早速試しに実行してみたところ、やはりFor j =1 to 9としていますが、
> 2回目のIfの際に『J=10』が代入されているようになっていました。
> (この考察が誤りでしたら厚かましながら今一度コメントを頂けますと幸甚です。)
Sub test()
Dim k As Long
For k = 1 To 3
'何もしない。主題ではないので。
Next
MsgBox k ' 4が表示されるはず
End Sub
の例で考えましょう。
k を 1 から順に 1ずつ加算して処理を実行するのですが、
k = 3 の処理を実行(この場合は何もしてませんが)した後で(Nextのところで)、
3 に 1 を加算して、おっと これは 上限値 3 を超えているからループから脱出せよ、
となるのです。
ですから、 ループを抜けた段階では、 k は 4 になっていて良いのです。
これは仕様です。
ループを抜けた後で、ここでいう k という ループカウンタの値を使うことは
めったにありません。k の役目はもう終わっているのです。
つまり、
> 2回目のIfの際に『J=10』が代入されているようになっていました。
これは想定どおりで、おかしなことでも何でもありません。
(2)
> →ご指摘頂きました、End IfをEnd Subに変えるプログラムで自分が得たい
> 回答を得ることができました!!
ちょっと誤解があります。
> 本来55以下を出力して欲しいので、
> 7*8=56がaより大きくなる為、その前の7*7=49までを出力して欲しいのですが、
> 6の段の54を出力した時点で止まってしまいます。
という記述からすると、
6 * 9 で終了してしまったらダメなはずで、
7*1, 7*2 ・・・・ と実行させたいわけですから、私が書きましたように、
以下のようにしたら良いでしょう。
Sub 掛け算で答えが55以下を表示し、その後はループしない()
Dim i As Long
Dim j As Long
Dim a As Long
Dim sheetobj As Worksheet
Set sheetobj = ThisWorkbook.Worksheets("Sheet1")
With sheetobj
a = 55
For i = 1 To 9
For j = 1 To 9
If i * j > a Then
Exit For
Else
.Cells(i + 1, j + 1).Value = i * j
End If
Next j
Next i
End With
End Sub
つづきは、どうぞトライしてみて下さい。
|
|